클래스에서 friend는 언제 쓰는 거죠?

friend선언을 알고는 있는데 한 번도 써본 적이 없고 어떤 경우에 써야 하는지를 모르겠습니다.

OOP의 캡슐화를 생각해보면 friend는 예외적인 기능이 아닌가요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    friend를 명시하면 해당 클래스가 protect data/function에 접근하는 것이 가능해집니다.

    밑의 코드에서는 아무나 Child 클래스의 name에 접근할 수 있지만 오직 Mother 클래스만이 Child 클래스의 name을 바꿀 수 있습니다.

    class Child
    {
    friend class Mother; 
    public:
      string name( void ); //모두가 접근 가능
    protected:
      void setName( string newName ); //Mother가 접근 가능
    };
    

    이렇게 간단한 예제에선 잘 와 닿지 않지만 Window같이 복잡한 클래스들이 많은 경우를 생각해보면,

    WindowManagerWindow는 상속관계는 아니지만 WindowManagerWindow의 public으로 접근해서는 안 될 function/data에 접근할 수 있어야 합니다. 이런 상황에서 friend는 유용하게 쓰입니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.