Friend
friend예약어란?
함수나 클래스를 선언할때 friend예약어를 사용하면 자신의 모든 멤버를 접근할 수 있는 친구(friend)를 만들수있습니다.
friend는 캡슐화와 반대되는 개념이라고도 생각할 수 있겠네요.
잘 이해가 안가시더라도 예시를 보시면 쉽게 이해하실 수 있습니다.
예시로 friend 함수와 friend 클래스를 간단한 예시로 다루어보겠습니다.
friend 함수
12행에 friend가 사용되었죠?
PrintData라는 함수는 Car클래스의 Friend 함수다! 라고 읽으시면 됩니다.
PrintData 내부를 보시면 절대 일어날수 없을 것만 같았던 행위를 하고있는걸 볼 수 있습니다. 무려 private멤버변수를 직접접근하고 있네요.
친구 잘사귀란 말이 있듯이(?) friend를 잘못 사용하면 굉장히 골치아파지는 점 참고하세요! 잘사용한다면 아주좋습니다.
friend 클래스
friend 클래스는 저도그렇고 이런생각을 할꺼같아요.
"상속냅두고 왜 friend를 사용할까..?private에 접근해야만 하는상황이 있는걸까?"
결론부터 말하자면 사용할 때가 있다! 입니다.
대표적으로 자료구조클래스를 예로 들 수 있습니다.(거진 다 자료구조를 예로 들더라구요;ㅅ;)
아주 간단하게 연결리스트를 friend 이용해서 구현해보겠습니다.
정말 기능이 별거없는 리스트를 한번 구현해봤습니다(;ㅅ;)
물론 말이죠. 저거 friend 안써도 get,set메서드 사용해서 구현 가능합니다.
하지만 가독성이 굉장히 떨어집니다. 그렇기 때문에 쓰는게 아닐까.. 저는 생각합니다.
그렇다고 public선언할순 없고, getset을 난사한다면 가독성도 해치고 코드도 꼬일수도 있고.. friend가 좋긴 좋네요..
ps.실무에서 일하시는 분 글을 읽어봤는데 friend 안쓰는게 낫다고 하시더라구요..
특별한 경우 아니면 쓸일이 없을거같습니다.