C++ std::friend
std::friend
C++는 클래스 안에서 다른 클래스나 다른 클래스의 멤버 함수 또는 비멤버 함수를 friend로 선언하는 기능을 제공한다. friend로 지정한 대상은 이 클래스의 protected나 priate 데이터 멤버와 메서드에 접근할 수 있다. 예를 들어 Foo와 Bar라는 두 클래스가 있다고 하자.class Foo
{
friend class Bar;
// ...
}
class Foo
{
friend void Bar::processFoo(const Foo& foo);
}
스탠드얼론 (standalone: 멤버가 아닌 독립) 함수도 클래스의 프렌드가 될수 있다. 다음과 같이 함수를 프렌드로 만들면 된다.
class Foo
{
friend void dumpFoo(const Foo& foo);
}
void dumpFoo(const Foo& foo)
{
// private 및 protected 데이터 멤버를 비롯한 foo의 데이터를 모두 콘솔에 출력한다.
}
- 프렌드로 지정할 클래스, 메서드, 함수는 반드시 접근할 클래스 안에서 지정해야 한다. 이들을 다른 곳에서 대상 클래스의 프렌드라고 선언해서 그 클래스의 private나 protected 멤버에 접근하게 할 수는 없다.
- 클래스나 메서드를 프렌드로 지정하는 기능을 너무 많이 사용하면 클래스의 내부가 외부 클래스나 함수에 드러나서 캡슐화 원칙 이 깨진다. 따라서 꼭 필요할 때만 사용한다.
참고
- 전문가를 위한 C++