반응형
반응형
💋 Friend Functions이란?
✔️ 개념
Friend Function은 특정 클래스의 private
또는 protected
멤버에 직접 접근할 수 있는 권한을 가진, 클래스 외부에서 정의된 함수입니다. (이게 뭔 짬뽕..?)
친구 함수는 클래스의 멤버 함수가 아니지만, 클래스 내에서 friend
키워드를 사용하여 친구로 선언됩니다.
⇒ 멤버 함수는 아닌데, 그래도 private
또는 protected
변수랑 함수에 직접 접근이 가능?!!
✔️ 사용 방법
친구 함수를 선언하기 위해서는 함수 앞에 friend
키워드를 붙이면 됩니다.
class MyClass {
private:
int data;
public:
MyClass(int value) : data(value) {}
friend void showData(MyClass& obj); // friend function 선언
};
// member function 아니고 그냥 외부 function인데 friend function인,,,
void showData(MyClass& obj) {
std::cout << "Data: " << obj.data << std::endl; // 직접 접근 가능
}
독특한 설정인데,, 뭐가 좋을까요?
💋 Friend Function의 장점과 단점
✔️ 장점
- 효율성
- 멤버 데이터에 직접 접근할 수 있기 때문에, 접근자(getter)나 설정자(setter)와 같은 추가적인 함수 호출 없이 데이터를 읽거나 수정할 수 있습니다.
- 특히 연산자 오버로딩에서 매우 유용하며, 성능을 개선할 수 있습니다.
- 유연성
- 연산자 오버로딩을 클래스의 멤버 함수로 정의할 때는 두 번째 피연산자만을 매개변수로 받을 수 있지만, friend 함수를 사용하면 두 피연산자 모두를 매개변수로 받을 수 있어, 표현이 더 자연스러울 수 있습니다.
✔️ 단점
- 캡슐화 위반
- 친구 함수는 클래스의 캡슐화 원칙을 위반할 수 있습니다.
- 캡슐화는 객체의 내부를 외부로부터 숨기는 것을 목적으로 하는데, 친구 함수는 이러한 내부 구현에 직접 접근할 수 있기 때문에, 클래스의 내부 변경이 외부에 영향을 미칠 수 있습니다.
- 유지 보수
- 클래스의 내부 구현이 변경될 경우, 해당 클래스의 친구 함수들 또한 수정해야 할 수 있어 유지 보수의 복잡성을 증가시킬 수 있습니다.
개인적으로 저는 단점이 더 크게 느껴지기는 합니다만,,,, (?)
여러분의 생각은 어떤가요?
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
반응형