본문 바로가기

지식창고/프로그래밍

(C++)friend키워드란?

반응형

의미 : 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