결정 기준표

friend 사용 판단

같은 private 데이터 접근이라도 단순 조회, 외부 연산자, 밀접한 협력 객체는 선택지가 다르다. 권한 범위가 좁은 쪽부터 검토하면 결합도를 낮출 수 있다.

먼저 검토

public API 또는 const getter

int width() const

읽기 전용 값, 명확한 행위, 불변 조건을 공개 함수 이름으로 표현할 수 있을 때 적합하다.

권한 범위
결합도
좁은 예외

friend function

operator<<(os, p)

함수 하나만 내부 상태를 읽어야 하고, 멤버 함수 형태가 자연스럽지 않은 계산이나 출력 연산자에 맞다.

권한 범위
결합도
마지막 후보

friend class

friend class Inspector

클래스 전체에 접근 권한을 주므로 편하지만 넓다. 내부 표현과 강하게 묶인 협력자일 때만 사용한다.

권한 범위
결합도
선택 순서

public API로 의도를 표현할 수 있으면 그쪽이 기본값이다. 꼭 private 접근이 필요하다면 friend class보다 friend function처럼 작은 권한을 먼저 선택한다.