friend 경계

friend는 캡슐화 경계에 만든 명시적인 예외다

friend function, friend class, operator<<, std::ostream의 관계를 보면 왜 접근 권한을 좁게 열어야 하는지 보입니다.

friend function

비멤버 friend 접근

멤버가 아닌 함수라 this를 받지 않는다는 차이를 기억합니다.

friend class

friend class 영향 범위

테스트 도구나 강하게 결합된 보조 타입이 아니면 과해질 수 있습니다.

operator<<

ostream 연산자 비멤버 구현

출력 형식만 열고 상태 변경은 피하면 경계가 작아집니다.

전이 없음

friend 관계의 비전이성

상속 관계에서도 friend 권한은 자동으로 넘어가지 않습니다.

접근 범위 필요한 함수 하나에만 권한을 주면 캡슐화 손상이 줄어듭니다.
대체 설계 getter나 공개 멤버 함수로 충분하면 friend 없이 해결합니다.
출력 연산 스트림 삽입 연산자는 읽기 전용 접근만 허용하는 형태가 안정적입니다.