반응형
항목 23 : 멤버 함수보다는 비멤버 비프렌드 함수와 더 까가워지자
웹브라우저를 나타내는 클래스가 하나 있다고 가정합시다. 웹브라우저 클래스라면 여러 기능을 제공하는 함수가 많을 것입니다. 캐시를 비우는 함수, URL의 기록을 없애는 함수, 쿠키를 전부 제거하는 함수등이 있겠죠.
1
2
3
4
5
6
7
8
|
class WebBrowser {
public:
...
void clearCache();
void clearHistory();
void removeCookies();
...
};
|
하지만 사용자 중에는 이 세 동작을 한 번에 하고 싶은 분들도 있기 때문에, 세 함수를 모아서 불러주는 함수도 준비해 둘 수 있을 것입니다.
1
2
3
4
5
6
|
class WebBrowser {
public:
...
void clearEverything();
...
};
|
물론 이 기능은 비멤버 함수로 제공해도 됩니다. 웹브라우저 객체의 멤버 함수를 순서대로 불러주기만 하면 되는 거죠.
1
2
3
4
5
6
|
void clearBrowser (WebBrowser& wb)
{
wb.clearCache();
wb.clearHistory();
wb.removeCookies();
}
Colored by Color Scripter
|
어느 쪽이 더 괜찮을까요? 멤버 버전일까요, 아니면 비멤버 버전일까요?
비멤버 버전이 캡슐화 정도에서도 오히려 좋고, 관련 기능을 구성하는데 있어서 패키징 유연성이 높아지는 장점이 있는데다가, 이로 인해 얻게 되는 추가적인 이점으로 컴파일 의존도도 낮추고 WebBrowser의 확장성도 높일 수 있습니다.
비멤버 방법이 멤버 함수보다 여러모로 낫다는 이야기가 나오는 이유입니다.
꼭 잊지 말아야 할 것!
멤버 함수보다는 비멤버 비프렌드 함수를 자주 쓰도록 합시다. 캡슐화 정도가 높아지고, 패키징 유연성도 커지며, 기능적인 확장성도 늘어납니다.
반응형
'언어 > C++' 카테고리의 다른 글
[Effective C++] 예외를 던지지 않는 swap에 대한 지원도 생각해 보자 (0) | 2020.01.25 |
---|---|
[Effective C++] 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 (0) | 2020.01.24 |
[Effective C++] 데이터 멤버가 선언될 곳은 private 영역임을 명심하자 (0) | 2020.01.22 |
[Effective C++] 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자 (0) | 2020.01.21 |
[Effective C++] '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대개 낫다 (0) | 2020.01.20 |