C++ std::friend
std::friend
C++는 클래스 안에서 다른 클래스나 다른 클래스의 멤버 함수 또는 비멤버 함수를 friend로 선언하는 기능을 제공한다. friend로 지정한 대상은 이 클래스의 protected나 priate 데이터 멤버와 메서드에 접근할 수 있다. 예를 들어 Foo와 Bar라는 두 클래스가 있다고 하자. 위는 Bar클래스를 Foo의 프렌드로 지정한 코드다. 그러면 Bar에 있는 모든 메서드는 Foo의 private나 protected 데이터 멤버 및 메서드에 접근 할 수 있다. 또는 특정 메서드만 프렌드로 만들수도 있는데 이때는 다음과 같이 작성하면 된다.스탠드얼론 (standalone: 멤버가 아닌 독립) 함수도 클래스의 프렌드가 될수 있다. 다음과 같이 함수를 프렌드로 만들면 된다. 위에서 friend 선언문은 함수 프로토타입의 역할을 한다. 이렇게 지정한 프로토타입은 다른 곳에 따로 선언하지 않아도 된다. 함수의 정의를 하는 방법은 다른 함수와 같다. 위에서 보는것처럼 함수를 정의할 때는 friend 키워드를 생략해도 된다.
- 프렌드로 지정할 클래스, 메서드, 함수는 반드시 접근할 클래스 안에서 지정해야 한다. 이들을 다른 곳에서 대상 클래스의 프렌드라고 선언해서 그 클래스의 private나 protected 멤버에 접근하게 할 수는 없다.
- 클래스나 메서드를 프렌드로 지정하는 기능을 너무 많이 사용하면 클래스의 내부가 외부 클래스나 함수에 드러나서 캡슐화 원칙 이 깨진다. 따라서 꼭 필요할 때만 사용한다.
참고
- 전문가를 위한 C++