의미 : A와 B라는 클래스가 있다고 가정을 하면,
서로 클래스 내부(클래스 내에서 정의된 함수)에서만 접근허용을
하게 하는 private 영역에도 접근을 가능 할 수 있게 해주는 역할을 하게 됩니다.
사용방법은 역시나 예제를 간단히 들고 왔습니다-
함수의 friend 선언.
#include <iostream>
using namespace std;
class Test
{
private:
int num;
public:
Test()
{
num = 5;
}
void ShowData() const
{
cout << num << endl;
}
friend void test(Test &c, int n1);
//전역함수의 friend 선언.
};
void test(Test &c, int n1)
//전역함수.
{
c.num = n1;
}
int main(void)
{
Test t;
t.ShowData();
//초기화 된 5의 값이 출력.
test(t,1004);
//friend선언된 test함수를 호출하여 1004를 대입.
t.ShowData();
return 0;
}
클래스의 friend선언.
#include <iostream>
using namespace std;
class A
{
private:
int num;
friend class B;
//B클래스는 A클래스의 친구로서 private 접근을 허용함.
public:
A()
{
num = 1;
}
void Show_A_Data()
{
cout << num << endl;
}
};
class B
{
public:
void Set_Data(A &a, int n1)
{
a.num = n1;
}
};
int main(void)
{
A a;
B b;
cout << "친구 클래스 B를 통하여 접근하기 전 A클래스의 값\n";
a.Show_A_Data();
b.Set_Data(a, 10);
//친구 클래스 b의 Set_Data 함수를 호출.
cout << "친구 클래스 B를 통하여 접근한 후 A클래스의 값\n";
a.Show_A_Data();
return 0;
}
위의 예제 두 개의 예제코드를 통하여 보아도
friend 키워드를 사용하여 private 영역에 문제 없이
접근 할 수 있는 것을 확인 할 수가 있습니다.
하지만 friend선언은 단일 방향성을 띄고 있습니다.
즉!! 무슨 말인가 하면, A클래스는 B클래스를 친구로서 인정하여
B클래스가 A클래스의 private에 접근하는 것을 허용하였지만,
반대로 A클래스가 친구인 B클래스의 private영역에 접근하려하면, 접근할 수 가 없다는 뜻입니다.
friend 키워드는 캡슐화에도 용이하다는 말도 있지만,
개념을 제대로 파악을 하지 못한 상태에서 사용하게 된다면,
정보은닉의 반하는 코딩이 되므로, 조심해야 한다는 점 잊지 마세요~
friend 키워드에 대해서 간단히 알아보았습니다~
또 봐요~ 씨~ 유~
'지식창고 > 프로그래밍' 카테고리의 다른 글
(C++)new와 delete란? (0) | 2019.07.07 |
---|---|
(C++)const static 키워드란? (0) | 2019.07.06 |
(C++)mutable 키워드란? (0) | 2019.07.05 |
(C++)explicit 키워드란? (0) | 2019.07.05 |
(C++)c++의 함수오버로딩이란? (0) | 2019.07.03 |