본문 바로가기
카테고리 없음

프렌드(friend) 사용법 (함수, 클래스) 총정리

by kangs' tong 2023. 8. 21.

프렌드(Friend)란?

프렌드는 객체지향 프로그래밍에서 클래스나 함수에 접근 권한을 부여해주는 기능입니다. 프렌드로 선언된 클래스나 함수는 해당 객체의 private 멤버에 접근할 수 있습니다.

프렌드를 사용하면 다른 클래스나 함수에서 private 멤버에 직접 접근하는 것이 가능해지므로, 정보 은닉(Encapsulation)을 유연하게 다룰 수 있습니다. 이를 통해 클래스의 내부 구현을 외부로부터 보호할 수 있고, 객체 간의 협력을 하나의 블랙박스로 추상화할 수 있습니다.

프렌드 함수(Friend Function)

프렌드 함수는 클래스의 private 멤버에 접근할 수 있는 함수로서, 해당 클래스의 friend 선언을 통해 지정됩니다. 프렌드 함수는 클래스의 멤버 함수가 아니므로, 클래스 이름과 스코프 연산자(::)를 사용하여 정의됩니다.

프렌드 함수는 일반적으로 해당 클래스의 private 멤버에 접근하여 계산이나 변환 작업을 수행하는 역할을 합니다. 이를 통해 정보 은닉 개념을 보다 유연하게 사용할 수 있습니다.

class MyClass {
private:
    int privateVariable;

    friend void FriendFunc(MyClass& obj);
};

void FriendFunc(MyClass& obj) {
    obj.privateVariable = 10; // private 멤버에 접근하여 값 설정
}

위의 예제에서 FriendFunc 함수는 MyClass 클래스의 privateVariable 멤버에 직접 접근하여 값을 설정하는 역할을 합니다. 이때 FriendFunc 함수는 MyClass 클래스의 friend로 선언되어 있어서, private 멤버에 접근이 가능합니다.

프렌드 클래스(Friend Class)

프렌드 클래스는 다른 클래스의 private 멤버에 접근할 수 있는 클래스로서, 해당 클래스의 friend 선언을 통해 지정됩니다. 프렌드 클래스는 특정 클래스의 모든 private 멤버에 접근할 수 있습니다.

프렌드 클래스는 대개 클래스 간의 협력 관계를 구현할 때 사용되며, 특정 클래스의 private 멤버를 공유함으로써 코드의 유연성을 높일 수 있습니다.

class MyClass {
private:
    int privateVariable;

    friend class FriendClass;
};

class FriendClass {
public:
    void AccessPrivateVariable(MyClass& obj) {
        obj.privateVariable = 10; // private 멤버에 접근하여 값 설정
    }
};

위의 예제에서 FriendClassMyClass 클래스의 friend로 선언되어 있어서, MyClass의 private 멤버에 직접 접근할 수 있습니다. AccessPrivateVariable 함수에서 obj.privateVariable을 통해 private 멤버에 접근하여 값을 설정하는 예제입니다.

정리

프렌드(Friend)는 객체지향 프로그래밍에서 정보 은닉을 유연하게 다루기 위해 사용되는 기능입니다. 프렌드 함수와 프렌드 클래스를 통해 객체의 private 멤버에 다른 클래스나 함수에서 접근할 수 있습니다.

프렌드 함수는 클래스의 friend 선언을 통해 private 멤버에 접근할 수 있는 함수로서, 일반적으로 계산이나 변환 작업을 수행하는 역할을 합니다.

프렌드 클래스는 다른 클래스의 private 멤버에 접근할 수 있는 클래스로서, 특정 클래스의 모든 private 멤버에 접근할 수 있습니다. 주로 클래스 간의 협력 관계를 구현할 때 사용됩니다.

프렌드를 적절하게 사용하면 정보 은닉을 유지하면서도 클래스의 private 멤버에 접근할 수 있는 유연한 코드를 구현할 수 있습니다.

댓글