[C++] friend 선언
Language/C++friend는 말그대로 친구를 말한다. 친구에게는 모든것을 허용해야 한다.
클래스안에서 private로 선언된 멤버변수는 외부 접근이 허용되지 않는 것이 원칙이다. 하지만 friend 선언을 통해서 접근을 허용할 수 있다.
- 전역 함수에 대한 friend 선언
1 2 3 4 5 6 7 8 9 10 11 | class AAA { int val; public: friend void setValue(AAA& a, int val); // friend 선언 }; void setValue(AAA& a, int val) { a.val = val; } |
원래대로라면 전역 함수 setValue에서 AAA객체의 val값에 접근할 수 없다.
하지만 5번째줄에서 friend 선언을 했으므로 접근이 허용되었다.
- 클래스에 대한 friend 선언
1 2 3 4 5 6 7 8 9 10 11 12 13 | class AAA { int val; friend class BBB; }; class BBB { public: void setValue(AAA& a, int val) { a.val = val; } }; |
클래스도 마찬가지로 friend 선언을 하면 private영역의 접근을 허용한다.
주의할 것은 friend 선언은 단방향적으로 AAA 클래스가 BBB 클래스에게 접근을 허용한 것이지 BBB 클래스또한 AAA 클래스에게 접근을 허용한 것은 아니다.
friend 선언은 매우 편리하지만 객체지향에서 중요시하는 '정보 은닉'을 해치는 경우를 초래할 수도 있으니 너무 많은 남발은 하지 않는 것이 좋다.
'Language > C++' 카테고리의 다른 글
[C++] const 키워드 (0) | 2015.12.02 |
---|---|
[C++] 복사 생성자 (0) | 2015.12.02 |
[C++] this 포인터 (0) | 2015.12.02 |
[C++] 생성자(Constructor)와 소멸자(Destructor) (0) | 2015.11.30 |
[C++] 캡슐화 (EnCapsulation) (0) | 2015.11.30 |