C, C++

[C++] Friend Function이란?: 친구 함수, 개념과 사용 방법, 장점과 단점

깃짱 2024. 5. 13. 08:00
반응형
반응형

 

💋 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 함수를 사용하면 두 피연산자 모두를 매개변수로 받을 수 있어, 표현이 더 자연스러울 수 있습니다.

✔️ 단점

  • 캡슐화 위반
    • 친구 함수는 클래스의 캡슐화 원칙을 위반할 수 있습니다.
    • 캡슐화는 객체의 내부를 외부로부터 숨기는 것을 목적으로 하는데, 친구 함수는 이러한 내부 구현에 직접 접근할 수 있기 때문에, 클래스의 내부 변경이 외부에 영향을 미칠 수 있습니다.
  • 유지 보수
    • 클래스의 내부 구현이 변경될 경우, 해당 클래스의 친구 함수들 또한 수정해야 할 수 있어 유지 보수의 복잡성을 증가시킬 수 있습니다.

개인적으로 저는 단점이 더 크게 느껴지기는 합니다만,,,, (?)

여러분의 생각은 어떤가요?

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!

 

 

반응형