Channi Studies

[C++] 클래스 friend | friends of a Class 본문

C++/객체지향 프로그래밍 (OOP)

[C++] 클래스 friend | friends of a Class

Chan Lee 2024. 1. 2. 18:23

Friend는 private 클래스 멤버에 접근권한이 있는 함수 또는 클래스입니다.

 

여기서 해당 함수 또는 클래스는 접근하고자 하는 클래스의 멤버가 아닙니다.

(접근하고자 하는 클래스의 속성 또는 메소드가 아닙니다.)

 

함수의 경우, 

일반적인 함수 일 수도 있고, 혹은 다른 클래스의 멤버 메소드일 수 있습니다.

 

클래스일 경우,

접근하고자 하는 클래스의 모든 private 멤버들에 대한 접근 권한이 있는 클래스입니다.

 

 

한마디로,

friend는 클래스의 모든 데이터에 접근 권한을 가진, 클래스 멤버가 아닌 외부 함수 또는 클래스입니다.

 

 

friend 관계는 friend 키워드를 사용해서 함수 또는 클래스의 정의를 할 때 명시해야 합니다.

 

또한, friend 관계는 양방향성이 없습니다.

A가 B의 friend라고 해서 (A가 B의 값들에 접근할 수 있다고 해서)

무조건 B 또한 A의 friend는 아닙니다 (B는 A의 값에 접근 권한이 없을 수 있습니다.)

 

마지막으로, friend 관계는 연속성이 없습니다.

A가 B의 friend이고, B가 C의 friend라고 해서 A가 C의 friend는 아닙니다.

 

syntax를 살펴보겠습니다.

class Player{
    friend void display_player_1 (Player &p);
    friend void Other_Class::display_player_2 (Player &p);
    friend class Another_Class;
    std::string name;
    int health;
    int xp;
public:
    ...
};

class Other_Class{
    ...
public:
    void display_player_2 (Player &p) {
        std::cout << p.name << std::endl;
        std::cout << p.health << std::endl;
        std::cout << p.xp << std::endl;
    }
};

class Another_Class{
...
};

void display_player_1 (Player &p) {
    ...
}

 

총 3가지의 friend keyword 사용 방법이 있습니다.

 

첫번쨰는 다른 클래스의 멤버 메소드에게 friend를 부여하는 것이고,

두번째는 일반 함수에게 부여하는 것이고,

세번째는 다른 클래스 자체에게 권한을 부여하는 것 입니다.

 

이렇게 하면 부여받는 함수, 메소드, 혹은 클래스(=클래스 내의 모든 멤버)들이

원본 클래스의 private 값들에 대해서 접근 권한을 받습니다.