least privilege

friend는 마지막에 선택하는 최소 권한 계약이다

내부 접근이 필요해 보여도 먼저 공개 API와 멤버 함수로 표현할 수 있는지 확인한 뒤, 필요한 만큼만 엽니다.

01public API읽기 의미를 이름 있는 함수로 노출할 수 있는가?
02member객체 불변식을 지키며 내부 책임으로 처리 가능한가?
03non-memberprivate 접근 없이 외부 계산으로 충분한가?
04friend function함수 하나에만 예외 접근을 줄 수 있는가?
05friend class여러 멤버가 꼭 같은 내부 권한을 공유해야 하는가?
캡슐화 약화외부 코드가 내부 구조를 알수록 클래스 변경 비용이 커집니다.
결합도 증가friend 대상과 private 필드명이 함께 묶여 리팩터링이 어려워집니다.
범위 과다friend class는 대상 클래스의 모든 멤버 함수에 문을 엽니다.
판정: 더 좁은 설계로 설명할 수 없을 때만 friend를 쓰고, 왜 필요한지 코드 옆에서 바로 읽히게 둡니다.