안녕하세요 열코입니다.

저번시간에 C++ 클래스와 접근제한자에 대해 알아보았는데요.

이번에는 저번시간 protected 제한자 부분에서 언급했던 friend(친구) 클래스와 함수에 대해 알아보겠습니다.


☞ freind 클래스란?

firend 클래스는 friend로 선언된 다른 클래스의 private 및 protected 멤버에 접근할 수 있습니다.

특정 상황에서 클래스 내에 접근하지 못하도록 private 제한을 두었는데, 필요의 경우 해당 클래스나 함수에서

접근 가능하도록 사용하는것이 friend 클래스 및 함수입니다.

사용법은 friend 키워드를 사용하여 클래스나 함수를 명시 해 주는 것 인데요.

아래 예제는 friend 클래스를 지정해주는 예제코드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string>
using namespace std;
 
class Friend1 {
private :
    string name;
 
    friend class Friend2;
};
 
class Friend2{
public : 
    void set_name(Friend1& f, string s) {
        f.name = s;
    }
    void show_name(Friend1& f) {
        cout << f.name << "\n";
    }
};
 
int main(void) {
    Friend1 f1;
    Friend2 f2;
    
    f2.set_name(f1, "열코");
    f2.show_name(f1);
 
    return 0;
}
cs


위 클래스를 보시면 Friend1 클래스와 Friend2 클래스가 있습니다.

Friend1 클래스에는 private 멤버 변수로 name이라는 string 변수가 존재합니다.

그 아래 보시면 friend class Friend2; 라는 코드가 보입니다.

이 코드가 바로 "나(Friend1)는 Friend2의 친구니까 내 개인적인 정보를 공유 해도 돼!" 라는 뜻입니다.

그리고 Friend2 클래스의 코드를 보시면 public 제한자의 함수 두개가 보입니다.



setter 함수와 출력 함수인데요, Friend1의 private 멤버인 name에 직접 접근하는것을 볼 수 있습니다.

친구니까 개인적인거 정도는 허용가능하겠죠? 

이런식으로 private 멤버나 protected 멤버를 외부 클래스에서 접근할 수 있도록 하는것이 friend 키워드입니다.


ㅇ 출력 결과


열코


☞ friend 함수란?

friend 클래스와 마찬가지로 private 및 protected 멤버에 접근할 수 있는 권한을 부여할 수 있습니다.

friend 기능을 클래스단위가 아닌 멤버 함수 단위로 지정해 주는것입니다.

아래 코드를 확인해보시죠.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
using namespace std;
 
class Friend1 {
private :
    string name;
 
    friend void set_name(Friend1&string);
};
 
 
void set_name(Friend1& f, string s) {
    f.name = s;
    cout << f.name << "\n";
}
 
int main(void) {
    Friend1 f1;
 
    set_name(f1, "열코");
 
    return 0;
}
cs


friend 키워드를 사용하여 set_name이라는 함수가 내 친구라는것을 컴파일러에게 알려주는 것입니다.

그래서 set_name 함수에서는 Friend1 클래스의 private 멤버인 name 변수에 접근이 가능한 것이죠.

생각보다 간단하고 쉬운 개념이죠?


* 주의사항

- 친구의 친구는 friend 키워드로 명시하지 않은 경우 친구 관계가 형성되지 않습니다.

- 친구의 자식도 마찬가지로 friend 키워드로 명시하지 않은 경우 친구 관계가 형성되지 않습니다.



이상 'friend 클래스와 함수'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.



'C, C++' 카테고리의 다른 글

C++ 가상 함수(Virtual Function)  (8) 2018.10.19
C++ 연산자 오버로딩  (2) 2018.10.12
C++ 함수 오버로딩  (0) 2018.10.11
C/C++ 메모리 동적할당  (0) 2018.10.11
C++ 클래스 접근제한자  (0) 2018.10.10
C++ 클래스와 객체  (0) 2018.10.09
C/C++ 구조체 사용법 및 예제  (1) 2018.10.08
C/C++ 배열 사용법  (0) 2018.10.05

to Top