C++ - friend

mohadang·2022년 9월 24일
0

C++

목록 보기
8/48
post-thumbnail
class X
{
  friend class Y;   <-- friend 선언, public으로 지정 안해도 접근 가능하다.
private:
  int mPrivateInt;
};

class Y
{
public:
  void Foo(X& x);
};
void Y::Foo(X& x)
{
  x.mPrivateInt += 10; <-- X 클래스의 private 멤버 변수 접근이 가능하다. Compile OK
}
  • OOP에서는 friend는 안티 패턴
    • 그러나 frined가 필요한 경우가 있음...
    • 캡슐화 되어 외부로 보여주지 않아야 하는데...
    • 시나리오
      • 어떤 큰 덩어리 클래스가 있음, 너무 커서 나누고 싶음
      • 나눴음, 그런데 서로 나눈 모듈끼리 인터페이스를 참조 할 수 있어야 하는데...
      • 서로 나눈 모듈끼리만 참조 가능하게끔 하고 그 이외 관련 없는 모듈끼리는 참조 못하게 하고 싶음
      • 서로 나눈 모듈끼리 friend 를 지정함
    • Java에서는 같은 패키지 안에서는 서로 참조가 가능함
      • 패키지 단위로 모듈을 생각함.
      • C#에 internal 키워드 있음.
  • friend 를 무조건 피하지도 말고 남용 하지도 말자
profile
mohadang

0개의 댓글