Page 103

스탠드얼론 standalone (멤버가 아닌 독립) 함수도 클래스의 프렌드가 될 수 있다. 예를 들어 Foo 객체에 있는 데이터를 콘솔에 출력하는 함수를 만든다고 하자. 이 함수를 Foo 클래스 밖에서 감사하는 모델로 만들려고 하는데, 제대로 검사하려면 이 객체의 내부 데이터 멤버의 값에 접 근해야 한다. 이때 Foo 클래스 정의에 다음과 같이 dumpFoo ( ) 함수를 프렌드로 만들면 된다. class Foo { friend void dumpFoo(const Foo& foo); // ... };

이 클래스에서 friend 선언문은 함수 프로토타입의 역할을 한다. 이렇게 지정한 프로토타입은 다른 곳에 따로 선언하지 않아도 된다(물론 그렇게 해도 문제가 발생하지는 않는다). 이 함수의 정의는 다음과 같다. void dumpFoo(const Foo& foo) { // private 및 protected 데이터 멤버를 비롯한 // foo의 데이터를 모두 콘솔에 출력한다. }

이 함수를 작성하는 방법은 다른 함수와 같다. Foo의 private와 protected 데이터 멤버에 직 접 접근할 수 있다는 점만 다르다. 이렇게 함수를 정의할 때는 friend 키워드를 생략해도 된다. 프렌드로 지정할 클래스, 메서드, 함수는 반드시 접근할 클래스 안에서 지정해야 한다. 이들을 다른 곳에서 대상 클래스의 프렌드라고 선언해서 그 클래스의 private나 protected 멤버에 접근하게 할 수는 없다. 클래스나 메서드를 프렌드로 지정하는 기능을 너무 많이 사용하면 클래스의 내부가 외부 클래 스나 함수에 드러나서 캡슐화 원칙이 깨진다. 따라서 꼭 필요할 때만 사용한다. 이 장에서 대표 적인 활용 사례를 소개한다.

9장 클래스와 객체 마스터하기 355

Profile for 한빛미디어

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

Advertisement