콘텐츠로 이동

프렌드 (Friends)

우리는 합리적인 범위 내에서 프렌드 클래스와 프렌드 함수의 사용을 허용합니다.

프렌드는 일반적으로 같은 파일에 정의되어야, 독자가 클래스의 비공개 멤버 사용처를 찾으려고 다른 파일을 뒤지지 않습니다. 프렌드의 일반적인 용도는 FooBuilder 클래스를 Foo의 프렌드로 지정하여, 내부 상태를 외부에 노출하지 않고도 Foo를 올바르게 구성하는 것입니다. 어떤 경우에는 단위 테스트 클래스를 대상 클래스의 프렌드로 만드는 것이 유용할 수 있습니다.

프렌드는 클래스의 캡슐화 경계를 확장하지만 깨뜨리지는 않습니다. 다른 특정 클래스에만 접근 권한을 주려는 경우, 멤버를 공개로 만드는 것보다 나을 수 있습니다. 그러나 대부분의 클래스는 공용 멤버를 통해서만 다른 클래스와 상호작용해야 합니다.


이해하기 쉽게 설명하기

핵심: 프렌드는 합리적인 선에서 허용

friend는 특정 클래스·함수에게 비공개 멤버 접근을 허용합니다. 캡슐화 경계를 확장하되 깨뜨리지는 않습니다 — 멤버를 public으로 여는 것보다, 딱 필요한 상대에게만 접근을 주는 편이 나을 때가 있습니다.

권장 사용

  • 같은 파일에 정의하세요. 그래야 독자가 비공개 멤버 사용처를 찾으려고 다른 파일을 뒤지지 않습니다.
  • 대표적 용도: FooBuilderFoo의 프렌드로 두어, 내부 상태를 외부에 공개하지 않고도 올바르게 구성하기.
  • 단위 테스트 클래스를 대상 클래스의 프렌드로 두는 것도 유용할 수 있습니다.

한계

대부분의 클래스는 public 멤버를 통해서만 다른 클래스와 상호작용해야 합니다. 프렌드는 예외적 수단입니다.