728x90
C++에서 친구(friend) 함수는 특정 클래스의 private 또는 protected 멤버에 접근할 수 있는 특별한 외부 함수입니다. 친구 함수는 클래스의 멤버 함수는 아니지만, 클래스 내부의 friend 선언을 통해 클래스의 비공개 멤버에 접근할 권한을 얻습니다.
기본 개념
- 친구 함수 선언:
- 클래스 내부에서 friend 키워드를 사용해 친구 함수를 선언합니다. 이렇게 선언된 함수는 클래스의 비공개 멤버에 접근할 수 있습니다.
- 친구 함수 정의:
- 친구 함수는 클래스 외부에서 정의되며, 해당 클래스의 멤버 함수가 아닙니다. 단순히 함수처럼 호출됩니다.
예제
다음 예제에서는 친구 함수가 클래스의 비공개 멤버에 접근하는 방법을 보여줍니다.
#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에 직접 접근할 수 있습니다.
친구 함수의 특징
- 접근성:
- 친구 함수는 클래스의 private 및 protected 멤버에 접근할 수 있습니다. 일반 함수는 이러한 멤버에 접근할 수 없지만, 친구 함수는 예외적으로 접근이 가능합니다.
- 클래스의 멤버가 아님:
- 친구 함수는 클래스의 멤버 함수가 아니므로, 함수 호출 시 클래스의 인스턴스를 필요로 하지 않으며, 단순히 외부 함수처럼 호출됩니다.
- 다중 친구 선언 가능:
- 클래스는 여러 친구 함수를 선언할 수 있으며, 이들 각 친구 함수는 해당 클래스의 비공개 멤버에 접근할 수 있습니다.
- 제한 사항:
- 친구 관계는 상속되지 않습니다. 즉, 기본 클래스의 친구 함수는 파생 클래스의 비공개 멤버에 접근할 수 없습니다.
주의사항 및 결론
친구 함수는 클래스의 캡슐화를 유지하면서도 외부 함수가 클래스의 내부 데이터에 접근할 수 있도록 해주는 유용한 기능입니다. 그러나 친구 관계를 남용하면 캡슐화가 무너질 수 있으며, 코드의 복잡성을 증가시킬 수 있으므로 신중하게 사용해야 합니다. 클래스 내부 구현에 대한 직접 접근이 꼭 필요한 경우에만 사용하는 것이 좋습니다.
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 |