내 경험에 따르면 캡슐화를 중단하는 데 사용 된 빈도와 비교하여 실제로 데이터 캡슐화를 향상시키는 친구 (또는 약간 비슷합니다)가 드문 사례입니다.
거의 유용하지 않지만 이전에 단일 클래스였던 클래스를 몇 가지 공통 데이터/기능에 액세스해야하는 두 개의 별도 클래스로 분할해야하는 경우에 사용합니다.
Outlaw 프로그래머의 의견에 응답하려면 편집 : 우리는 이것에 절대적으로 동의합니다. 클래스를 분리 한 후에 friend'ing 클래스를 제외하고 다른 옵션은 public 접근자를 만드는 것입니다. 어떤 사람들은 우호적 인 클래스가 어떻게 든 캡슐화를 깨뜨린다고 생각합니다. 왜냐하면 부적절하게 많이 사용되는 것을 보았 기 때문에 많은 사람들이 코드가 올바르게 사용 된 코드를 보지 못했을 것입니다. 드문 일이기 때문입니다. 나는 그것을 말하는 당신의 방법을 좋아합니다 - 친근감은 당신이 당신의 수업을 나누지 못하게하고 모든 사람들이 대중들에게 접근 가능하게하는 것 사이의 좋은 중간 단계입니다.
David Thornley에 대한 응답 편집 : C++에서 이와 같은 작업을 수행 할 수있는 유연성은 C++에 대한 설계 결정 결과입니다. 이것이 유연한 언어에서 일반적으로 좋은 스타일과 나쁜 스타일을 이해하는 것이 무엇보다 중요하다고 생각합니다. Java의 관점은 이러한 클래스가 제공되지 않도록 친구 클래스를 사용해서는 안되지만 C++ 프로그래머는 매우 융통성 있지만 때로는 잘못 사용 된 언어 구문을 적절히 사용하도록 정의하는 것이 커뮤니티의 책임이라는 점입니다.
톰에 대응하기 위해 편집 : 변경은 반드시 캡슐화를 깨뜨리는 것은 아니지만 캡슐화를 위반하는 사람들을 보는 것이 훨씬 일반적이기 때문에 실제 상황에서 본 가변 키워드의 많은 용도가 캡슐화를 중단합니다. 처음에는 mutable의 적절한 사용을 실제로 발견하고 이해하는 것보다 가변적이다.
분명히 친구 클래스에 대한 사용이 있지만, 그렇지 않으면 내가 언어 사양에 포함시키지 않은 것보다 더 큰 마음을 디자인 스타일로 간주하는 경향이 있습니다. 그들은 일반적으로 내 수업 체계를 다시 봐야한다는 것을 나에게 나타내며, 나는 종종 그것을보다 우아하게 재구성하고 친구 클래스의 필요성을 제거 할 수 있음을 발견한다. – Mawg