C++/C++ 기본

C++ 프렌드 개념

검정비니 2018. 8. 2. 21:33
728x90
반응형

C++ 프렌드




1. 프렌드 함수



C++에서는 클래스 외부에 작성된 함수를 클래스 내에 friend 키워드로 선언하여, 클래스의 멤버 함수와 동일한 접근 자격을 부여할 수 있다. 물론, 멤버가 아니기 때문에 상속되지는 않는다. 클래스 내에 friend 키워드로 선언된 외부 함수를 프렌드 함수(friend function)라고 부른다. 프렌드 함수는 마치 클래스의 멤버인 것처럼 멤버 변수와 멤버 함수에 접근할 수 있다.


그렇다면, 프렌드 함수는 왜 필요할까? 프렌드 함수를 클래스의 멤버 함수로 작성하면 되지 않을까? 프로그램을 작성하다보면, 클래스 멤버 함수로는 적합하지 않지만, 클래스의 private, protected 멤버에 접근해야 하는 함수가 생기게 된다. 이러한 함수를 프렌드 함수로 사용하는 것이다.


프렌드 함수를 선언할 수 있는 경우는 다음 3가지이다.


- 클래스 외부에 작성된 함수를 프렌드로 선언

- 다른 클래스의 멤버 함수를 프렌드로 선언

- 다른 클래스의 모든 멤버 함수를 프렌드로 선언





2. 프렌드 멤버 선언



다른 클래스의 멤버 함수를 클래스의 멤버 함수를 클래스의 프렌드 함수로 선언할 수 있다. 다음은 RectangleManager 클래스의 equals 함수를 Rect 클래스의 프렌드 함수로 선언하는 예시이다.


i.e.

class RectManager {

.......................

bool equals(Rect r, Rect s);

};


class Rect {

..............

friend bool RectManager::equals(Rect r, Rect s); //RectManager의 equals() 멤버 함수를 프렌드로 초대

};


이렇게 함으로써 RectManager 클래스의 멤버 함수 equals는 Rect 클래스의 멤버들에 접근할 수 있다.




3. 프렌드 클래스 선언



다른 클래스의 모든 멤버 함수를 클래스의 프렌드 함수로 한 번에 선언할 수 있다. 다음 코드는 RectManager 클래스를 Rect 클래스에 프렌드로 초대하는 예시이다.


i.e.

class Rect {

...................

friend RectManager; //RectManager 클래스의 모든 함수를 프렌드로 초대

};


이렇게 함으로써 RectManager의 모든 멤버 함수는 Rect 클래스의 모든 멤버를 자유롭게 접근할 수 있다.

반응형

'C++ > C++ 기본' 카테고리의 다른 글

c++ 상속  (0) 2019.01.09
연산자 함수는 멤버 함수나 프렌드 함수 중 어떤 것이 바람직한가?  (0) 2019.01.01
static 멤버  (0) 2018.07.31
디폴트 매개 변수  (0) 2018.07.30
함수 중복  (0) 2018.07.28