• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

friend 키워드에 대한 개념이 안잡힙니다.

23.12.28 23:53 작성 조회수 138

1

안녕하세요.

아래와 같은 코드가 있다고 가정했을때,

첫번째 operator(friend 키워드가 없는)는 에러표시를 하고

두번째 operator(friend 키워드가 있는)는 정상 컴파일이 됩니다.

friend 키워드에 대한 강의도 앞에서 보았고,

'private 멤버 함수에 대한 접근이 가능하도록 해준다' 는 생각과 operator 코드 작성간의 상관관계가 무엇인지 모르겠습니다 ㅠ

// 아래 함수 정의에선 해당 오퍼레이터 함수에 인자값이 너무 많다고 하고,
std::ostream& operator << (std::ostream &out, const Point& point)
{

}
// friend 키워드를 붙일경우엔 정상 컴파일이 됩니다.
friend std::ostream& operator << (std::ostream &out, const Point& point)
{

}

 

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2023.12.29

안녕하세요, 답변 도우미 Soobak 입니다.

 

외부함수인 std::operator << 함수가 Point 클래스의 private 멤버에 접근할 수 있도록 friend 선언을 해주는 것입니다.

 

private 멤버는 해당 클래스와 그 클래스의 멤버 함수에서만 접근이 가능합니다.
하지만, 때때로 외부 함수(이 경우에는 std::operator << 함수)나 다른 클래스가 이러한 private 멤버에 접근해야할 필요가 있을 수 있습니다.
이 때, friend 키워드를 사용합니다.

 

첫 번째 operator << 정의는 Point 클래스의 private 멤버에 접근할 수 없기 때문에 컴파일 에러가 발생하게 됩니다.
반면, friend 키워드를 사용하여 정의된 두 번째 operator <<Point 클래스의 private 멤버에 접근할 수 있기 때문에 정상적으로 컴파일이 되는 것입니다.