[c++] 구조체와 클래스의 friend 클래스

구조체와 클래스의 friend 클래스

C++에서 구조체(struct)클래스(class)는 서로 다른 키워드지만 동일한 기능을 가집니다. 둘 다 멤버 변수와 함수를 포함할 수 있고, 인스턴스를 생성하여 사용할 수 있습니다. 하지만 둘 간에는 특정 차이점이 있습니다. 그 중 하나는 friend 클래스를 사용할 때의 차이입니다.

구조체(struct)의 friend 클래스

구조체에서도 friend 클래스를 선언할 수 있습니다. 이 경우에는 struct 키워드를 사용하여 멤버 함수를 friend로 선언합니다.

예제

#include <iostream>

struct MyStruct {
private:
    int secretValue;
    
    friend class FriendClass;  // FriendClass를 friend로 선언

public:
    MyStruct(int value) : secretValue(value) {}

};

class FriendClass {
public:
    void AccessMyStruct(MyStruct &obj) {
        std::cout << "The secret value in MyStruct is: " << obj.secretValue << std::endl;
    }
};

int main() {
    MyStruct obj(5);
    FriendClass f;
    f.AccessMyStruct(obj);  // FriendClass가 MyStruct의 private 멤버에 접근
    return 0;
}

클래스(class)의 friend 클래스

클래스에서는 friend 클래스를 선언할 때 class 키워드를 사용합니다.

예제

#include <iostream>

class MyClass {
private:
    int privateValue;
    
    friend class FriendClass;  // FriendClass를 friend로 선언

public:
    MyClass(int value) : privateValue(value) {}

};

class FriendClass {
public:
    void AccessMyClass(MyClass &obj) {
        std::cout << "The private value in MyClass is: " << obj.privateValue << std::endl;
    }
};

int main() {
    MyClass obj(10);
    FriendClass f;
    f.AccessMyClass(obj);  // FriendClass가 MyClass의 private 멤버에 접근
    return 0;
}

결론

구조체와 클래스 모두 friend 클래스를 사용하여 다른 클래스나 구조체의 private 멤버에 접근할 수 있습니다. 구조체와 클래스의 friend 클래스를 선언하는 방법은 유사하지만, 구조체의 경우 struct 키워드를, 클래스의 경우 class 키워드를 사용해야 합니다.

참고 문헌: