`std::cout << point`처럼 좌측이 `ostream`이면 `Point`의 멤버 함수로 자연스럽게 만들기 어렵다.
사용 여부를 가르는 질문
외부 함수가 좌측 피연산자나 호출 주체를 가져야
하는가?
필요한 데이터가 공개 인터페이스로 충분히 표현되는가?
읽기 전용 정보라면 `const` 게터나 출력 전용 직렬화 함수가 더 안전한 선택일 수 있다.
권한을 함수 하나로 좁힐 수 있는가?
`friend class`는 클래스 전체에 권한을 주므로, 가능하면 `friend int area(const Box&)`처럼 작은 단위가 낫다.
두 선언의 차이
특정 함수만 내부 접근
객체를 `this`로 갖지 않지만 내부 상태가 필요한 계산, 비교, 출력 연산자에 어울린다.
VaultInspector 내부 검사
편하지만 권한 범위가 넓다. 테스트 도구나 밀접한 협력 객체처럼 이유가 분명할 때만 선택한다.
결론: friend는 캡슐화를 없애는 키워드가 아니라, 예외적으로 허용할 대상을 선언하는 문법이다. 선언한 대상 외에는 자동으로 권한이 퍼지지 않는다.