[C++] friend 클래스 / 함수

Programming/C++_C#|2022. 9. 9. 15:56
반응형

안녕하세요.

playground입니다.

이번 포스팅에서는 c++에 쓰이는 friend클래스와 함수에 대해 알아보겠습니다.

c++ friend

friend 클래스
friend 함수

friend class란?

 

c++에서는 A, B 클래스가 존재한다고 할 때,

클래스 안에 private나 protected 멤버들은 서로 접근을 하지 못합니다.

 

이 때 A에서 B를 friend 클래스로 선언해주면 
B에서 A클래스의 private, protected 멤버에 직접 접근이 가능합니다.

 

여기서 중요한 건 당하는 쪽 (A, 아래 예제에서는 me클래스)에서

bank(은행) 클래스 를 friend class로 선언해주면

은행 클래스(B)에서 당한 쪽 클래스를 마음대로 가져다 쓸 수 있다는 것입니다.

 

A와 B라는 클래스가 있을 때

 

"내(A) 입장에서는 친구는 은행(B)야!
 그러므로 B에서는 내(A) 모든 걸 가져다 쓸 수 있어!"

 

하지만 B의 생각은 다른가봅니다.

A는 B의 private, protected멤버를 가져다 쓸 수 없습니다.

 

반응형

friend class 코드 예

 

1) 먼저 클래스 cMe와 cBank를 아래와 같이 만들고 cMe(나) 클래스에서 friend class로 cBank(은행)을 선언해줍니다.

 

2) main함수에서 cMe(나)와 cBank(은행) 객체를 만들고 아래와 같이 은행에서 인출해줍니다.

    이 때 cMe(나)클래스에서 프랜드 클래스로 은행을 선언했으므로 은행에서는 내 정보를 가지고 돈을 인출해갑니다.(ㅠㅠ)

 

<결과값>

프랜드 클래스로 선언했으므로 은행에서는 내 정보에 접근해 돈을 가져갈 수 있습니다.


friend 함수

 

friend함수란 전체 클래스가 아닌 특정 함수만 friend함수로 선언하는 걸 이야기합니다.

 

아래 예제를 보겠습니다.

 

1) 먼저 cBank를 클래스에서 Test1와 Test2 테스트 함수를 만들어줍니다.(위에 class cMe 전방선언)

 

 

2) cMe클래스에서 프랜드 함수로 cBank의 Test1만 선언해줍니다.

     그러면 friend 클래스와는 달리 cBank의 Test1 함수에서만 cMe를 쓸 수 있게 됩니다.

 

3) Test2함수에서는 에러가 뜨네요. cMe클래스의 private멤버에 접근할 수 없다고 뜹니다.

     Test1 함수만 프랜드 함수이므로 cMe클래스에 접근할 수 있습니다.

 

<결과값>

반응형

댓글()