C++

[C++] 친구(friends) 함수

코딩 메모장 2024. 11. 12. 20:58
728x90

C++에서 친구(friend) 함수는 특정 클래스의 private 또는 protected 멤버에 접근할 수 있는 특별한 외부 함수입니다. 친구 함수는 클래스의 멤버 함수는 아니지만, 클래스 내부의 friend 선언을 통해 클래스의 비공개 멤버에 접근할 권한을 얻습니다.

기본 개념

  1. 친구 함수 선언:
    • 클래스 내부에서 friend 키워드를 사용해 친구 함수를 선언합니다. 이렇게 선언된 함수는 클래스의 비공개 멤버에 접근할 수 있습니다.
  2. 친구 함수 정의:
    • 친구 함수는 클래스 외부에서 정의되며, 해당 클래스의 멤버 함수가 아닙니다. 단순히 함수처럼 호출됩니다.

예제

다음 예제에서는 친구 함수가 클래스의 비공개 멤버에 접근하는 방법을 보여줍니다.

#include <iostream>

class MyClass {
private:
    int value;

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

    // 친구 함수 선언
    friend void display(MyClass& obj);
};

// 친구 함수 정의
void display(MyClass& obj) {
    std::cout << "Value: " << obj.value << std::endl; // private 멤버에 접근
}

int main() {
    MyClass obj(42);
    display(obj); // 친구 함수를 호출하여 private 멤버에 접근
    return 0;
}

위 코드에서 display 함수는 MyClass의 friend로 선언되어 value에 직접 접근할 수 있습니다.

친구 함수의 특징

  1. 접근성:
    • 친구 함수는 클래스의 private 및 protected 멤버에 접근할 수 있습니다. 일반 함수는 이러한 멤버에 접근할 수 없지만, 친구 함수는 예외적으로 접근이 가능합니다.
  2. 클래스의 멤버가 아님:
    • 친구 함수는 클래스의 멤버 함수가 아니므로, 함수 호출 시 클래스의 인스턴스를 필요로 하지 않으며, 단순히 외부 함수처럼 호출됩니다.
  3. 다중 친구 선언 가능:
    • 클래스는 여러 친구 함수를 선언할 수 있으며, 이들 각 친구 함수는 해당 클래스의 비공개 멤버에 접근할 수 있습니다.
  4. 제한 사항:
    • 친구 관계는 상속되지 않습니다. 즉, 기본 클래스의 친구 함수는 파생 클래스의 비공개 멤버에 접근할 수 없습니다.

주의사항 및 결론

친구 함수는 클래스의 캡슐화를 유지하면서도 외부 함수가 클래스의 내부 데이터에 접근할 수 있도록 해주는 유용한 기능입니다. 그러나 친구 관계를 남용하면 캡슐화가 무너질 수 있으며, 코드의 복잡성을 증가시킬 수 있으므로 신중하게 사용해야 합니다. 클래스 내부 구현에 대한 직접 접근이 꼭 필요한 경우에만 사용하는 것이 좋습니다.

728x90

'C++' 카테고리의 다른 글

[C++] 템플릿 매개변수(template parameter)  (1) 2024.11.14
[C++] 숨겨진 친구(hidden friend)  (2) 2024.11.13
[C++] noexcept  (0) 2024.11.11
[C++] 람다 함수의 클로저 타입  (0) 2024.11.10
[C++] 람다(lambda) 함수  (0) 2024.11.09