강께르의 개발일지
[C++] friend 키워드 본문
- 연산자 오버로딩을 공부하던 중, 전역 함수로 연산자 오버로딩을 위해 friend 키워드가 사용된다는 것을 알았다.
- 이를 정리하고 연산자 오버로딩을 계속 정리하려고 한다.
1. friend 키워드
- friend 키워드는 멤버로 선언된 특정 클래스나 함수에게 붙여 그들에게 private처럼 접근이 불가능한 멤버를 공개한다는 의미이다.
- friend 선언은 어디에 있든지 상관없다. public이든 private든 상관없다. 그렇게 선언된 변수인 클래스나 함수는 그 클래스의 private 멤버에 접근할 수 있다는 것이다. 이는 정보은닉이라는 특징을 무너뜨리는 것이기도 하다.
class Point
{
private:
int xPos;
int yPos;
public:
Point(int x = 0, int y = 0)
: xPos(x), yPos(y)
{ }
friend Point operator+(const Point& pos1, const Point& pos2);
};
Point operator+(const Point& pos1, const Point& pos2)
{
return Point(pos1.xPos + pos2.xPos, pos1.yPos + pos2.yPos);
}
Point pos1(3, 4);
Point pos2(4, 5);
Point pos3 = operator+(pos1, pos2);
Point pos3 = pos1 + pos2;
- 전역함수 연산자 오버로딩을 다시 가져왔다. friend의 특성을 기억하며 분석해보자.
- friend 선언은 어디에 있든 상관없다. 이 경우엔 함수를 friend로 public에 선언하여 Point에 속하지 않은 모습이다.
- 그리고 전역함수로 정의하는 모습을 보자. 반환값을 Point 객체를 생성해서 전달하려고 한다. 그런데 매개변수를 보니 pos1의 private 멤버인 xPos와 yPos에 접근하여 사용하는 것을 볼 수 있다. pos2도 마찬가지이다.
- 이처럼 friend 키워드는 접근 제어 지시자를 무시하고 friend가 선언된 클래스나 함수에게 그 클래스의 private 멤버를 접근할 수 있도록 열어주는 것이다.
- 그럼 왜 쓰는 것일까? 정보은닉을 무너뜨리는 문법이기 때문에 코드가 꼬이고 클래스 관계가 얽히는 것을 감당할 수 없다면 가급적 사용하지 않는 게 좋다. 문법적으로 이해만 하고 사용하지 않는 방향으로 연습하다가 사용해야 할 기준이 생길 때 사용하는 것이 좋다. 그 예는 연산자 오버로딩이다.
출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=dd1587&logNo=221141774441
C++ friend 키워드
C++ friend 키워드C++ friend 키워드에 대해 알아보려고하는데요. firend키워드는 특정 클래스 또는 함수...
blog.naver.com
윤성우의 열혈 C++ 프로그래밍 - 교보문고
본 도서는 2004년도에 출간된 윤성우 저자 「열혈강의 C++ 프로그래밍」의 개정판이다. 초판과 마찬가지로 C언어를 이해하고 있다는 가정하에서 집필된 C++ 기본서로서, 초보자에게 적절한 설명과
www.kyobobook.co.kr
'프로그래밍 > C++' 카테고리의 다른 글
| [C++] 템플릿에 대해(함수 템플릿) (0) | 2021.06.17 |
|---|---|
| [C++] 연산자 오버로딩에 대해_2 (0) | 2021.06.17 |
| [C++] 연산자 오버로딩에 대하여_1 (0) | 2021.06.16 |
| [C++] 다중 상속과 가상 상속 (0) | 2021.06.16 |
| [C++] 클래스의 상속(가상 함수와 다형성) (0) | 2021.06.16 |