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

C++에서, 구조체(struct)와 클래스(class)는 유사하지만 몇 가지 차이가 있습니다. 그 중 하나는 friend 함수에 대한 접근 권한입니다. 이러한 friend 함수는 클래스 또는 구조체의 private 멤버에 접근할 수 있는 특별한 함수입니다.

구조체의 friend 함수

구조체에서 friend 함수를 정의하기 위해서는 다음과 같은 문법을 사용합니다:

struct MyStruct {
private:
    int privateMember;

    friend void myStructFriendFunction(MyStruct &s);
};

위 예제에서 myStructFriendFunction 함수는 MyStruct 구조체의 private 멤버에 접근할 수 있도록 설정됩니다.

클래스의 friend 함수

클래스의 경우, friend 함수를 정의하는 방법은 다소 다릅니다:

class MyClass {
private:
    int privateMember;

    friend void myClassFriendFunction(MyClass &c);
};

위 예제에서 myClassFriendFunction 함수 역시 MyClass 클래스의 private 멤버에 접근할 수 있도록 설정됩니다.

구조체 및 클래스의 friend 함수 사용 예

이제 구조체와 클래스의 friend 함수를 사용하는 예제를 살펴보겠습니다:

#include <iostream>

struct MyStruct {
private:
    int privateMember;

    friend void myStructFriendFunction(MyStruct &s);
};

void myStructFriendFunction(MyStruct &s) {
    s.privateMember = 10;
}

int main() {
    MyStruct s;
    myStructFriendFunction(s);

    std::cout << "Private member value: " << s.privateMember << std::endl;

    return 0;
}

위의 예제에서 myStructFriendFunction 함수는 MyStruct 구조체의 private 멤버에 접근하여 값을 변경할 수 있습니다.

결론

구조체와 클래스의 friend 함수를 사용하면 private 멤버에 접근할 수 있으므로, 특정 상황에서 유용하게 활용될 수 있습니다.

참고문헌: