2015. 8. 25. 16:54ㆍ프로그래밍/Effective C++
클래스에서 여러 함수를 호출해야 할 때, 함수들을 모아서 불러주는 함수를 만들 수 있다.
예시
해당 클래스의 클리어에 관련된 모든 함수를 호출하는 함수를 만들고 싶다.
1안은 멤버 함수로 2안은 비멤버 함수로.
비멤버 함수의 이점
캡슐화! 함수가 보이지가 않아요!
- 어떤 것을 캡슐화하면, 외부에서 이것을 볼 수 없게 된다.
- 그렇게 되면 (변경 자체가 영향을 줄 수 있는 범위가 ‘변경된 것을 볼 수 있는 것들’로 한정되기 때문에)
그것들을 바꿀 때 필요한 유연성이 커진다.
- 즉, 이미 있는 코드를 바꾸더라도 제한된 사용자들 밖에 영향을 주지 않는 융통성을 확보할 수 있다.
- 해당 클래스의 관련된 기능을 구현하는 데 있어서 패키징 유연성(packaging flexibility)이 높아진다.
네임스페이스를 이용
- clearBrowser는 있어도 되고 없어도 되는
편의 함수이기 때문에, 이것이 없을 경우에
그냥 함수를 각각 호출해 주면 된다.
- namespace는 여러 개의 소스 파일에 나뉘어
흩어질 수 있기 때문에, 편의 함수마다
각각 다른 헤더 파일에 몰아서 선언할 수도
있다.
- 여러 개의 헤더 파일(단, 동일한 네임스페이스)에 나누어 놓으면 확장도 손쉬워진다.
C++의 라이브러리
C++의 라이브러리가 이러한 구조로 구성되어 있다.
- namespace std에 속한 함수들이 한 헤더에 들어가 한 통으로 섞여 있지 않고,
- 몇 개의 기능과 관련된 함수들이 수십 개의 헤더에 흩어져 선언되어 있다.
- 필요한 헤더만 선언한 후, 필요한 기능만 사용할 수 있기 때문에
사용자가 실제로 사용하는 구성요소에 대해서만 컴파일 의존성을 고려할 수 있게 되었다.
클래스는 분할이 되지 않으므로 클래스 멤버 함수는 상상도 할 수 없는 일이다.
정리
- 멤버 함수보다는 비멤버 비프렌드 함수를 자주 쓰도록 하자!
- 캡슐화 정도가 높아지고,
- 패키징 유연성도 커지며,
- 기능적인 확장성도 늘어난다.
'프로그래밍 > Effective C++' 카테고리의 다른 글
변수 정의 최대한 늦추기(effective c++ 26) (0) | 2015.08.25 |
---|---|
예외를 던지지않는 swap(effective c++ 25) (0) | 2015.08.25 |
타입변환이 모든 매개변수에 적용된다면? 그 함수는 비멤버로(effective c++ 24) (0) | 2015.08.25 |
데이터 멤버는 private(effective c++ 22) (0) | 2015.08.25 |
함수에서 객체 반환시 참조로 X(effective c++ 21) (0) | 2015.08.23 |
클래스 설계는 타입 설계와 같이 보자(effective c++ 19) (0) | 2015.08.20 |
인터페이스 설계방법. 제대로는 쉽게, 엉터리론 어렵게(effective c++ 18) (0) | 2015.08.20 |