C++ friend 사용

friend 사용 기준

friend는 private을 무너뜨리는 우회로가 아니라 특정 함수나 클래스에만 내부 접근을 허용하는 선언이다. 연산자, 직렬화, 테스트 편의를 구분해야 설계가 흐려지지 않는다.

01

기준 확인

public API로 충분히 표현할 수 있으면 friend를 추가하지 않는다.

우선 API 검토
02

대상 축소

전체 클래스보다 필요한 함수 하나에만 friend를 주는 쪽을 우선한다.

최소 권한
03

표현 결합

friend가 내부 멤버 이름과 레이아웃에 강하게 묶이는지 본다.

변경 비용
04

테스트 분리

테스트만을 위해 friend가 필요하다면 관찰 가능한 계약이 부족한지 다시 본다.

설계 신호
operator<<
출력 형식이 내부 상태를 읽음 비멤버로 두되 필요한 필드 접근만 허용하는 friend가 흔하다.
ostream& 반환
operator+
좌항 변환을 허용 대칭성을 위해 비멤버 연산자가 필요하고 내부 접근이 필요할 수 있다.
멤버만 고집 금지
factory
생성 경로 제한 생성자를 private으로 두고 특정 builder만 접근하게 만들 수 있다.
불변식 보호
test
테스트 결합 위험 private 구현 검증보다 public 결과 검증이 유지보수에 강하다.
과용 경계

전파 착각 · 헤더 의존 · 불변식 점검

전파 착각 friend 관계는 상속되지 않고 friend의 friend에게도 전달되지 않는다.
헤더 의존 friend 선언 때문에 불필요한 include가 늘지 않는지 전방 선언을 검토한다.
불변식 friend 함수도 객체의 유효 상태를 깨지 않도록 같은 검증 규칙을 따른다.