[ Effective C++ ] 항목 23 : 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워 지자

Minsu._.Lighting·2023년 11월 26일
0

[ Effective C++ ] 정리 모음집
" C++ 프로그래머의 필독서, 스콧 마이어스의 Effective C++ 를 읽고 내용 요약 / 정리 "

[핵심]

" 비멤버 비프렌드 함수가 멤버 함수보다 여러모로 낫다! "

  • 멤버 함수보다는 캡슐화 정도가 높아지고 패키징 유연성도 커지며 기능적인 확장성도 늘어나는 비멤버 비프렌드 함수를 자주 쓰도록 하자!

💡 멤버함수, 비멤버 비프렌드 함수

[예시 코드]

class WebBrowser
{
public:
	void clearCache();
	void clearHistory();
	void removeCookies();
};

[멤버 함수 버전]

void clearEveryting()
{
	clearCache();
	clearHistory();
	removeCookies();
}

[비멤버 함수 버전]

void clearBrowser(WebBrowser& wb)
{
	wb.clearCache();
	wb.clearHistory();
	wb.removeCookies();
}

📌 둘 중 어느쪽이 더 괜찮은가?

  • 객체 지향 법칙은 할 수 있는 만큼 데이터를 캡슐화 하라고 함
    - 멤버 함수 버전보다 비멤버 함수 버전이 캡슐화가 잘 되어 있음.

  • 비멤버함수를 사용하면 패키징 유연성이 높아지고 컴파일 의존도도 낮출 수 있으며 확장성 또한 높일 수 있다.

  • 캡슐화
    - 비멤버 비프렌드 함수는 어떤 클래스의 private 멤버 부분을 접근할 수 있는 함수의 개수를 늘리지 않는다.

📌 주의할 점!

  • 비멤버 비프렌드 함수에만 적용되는 이야기 이다.

  • '함수는 어떤 클래스의 비멤버가 되어야 한다'라는 주장이 '그 함수는 다른 클래스의 멤버가 될 수 없다' 라는 의미가 아니라는 것.

📌 가장 자연스러운 방법

[예시 코드]

namespace WebBrowserStuff
{
	class WebBrowser {...};
	void clearBrowser(WebBrowser& wb);
...
}

📕 namespace를 활용해서 여러 파일에서 필요한 부분들도 함수를 쪼개 쓰면 된다!

profile
오코완~😤😤

0개의 댓글

관련 채용 정보