1 ) std::string::erase가 비멤버 함수가 될 수 있을까?
2 ) std::string의 나머지 멤버 함수들을 분석하고, 비멤버 함수들로 만들 수 잇는지(또는 그렇게 하는 것이 좋은지) 설명하라
a. replace
b. copy와 substr
c. compare
d. find 군(find, find_*, rfind )
이렇게 질문이 있는데, 하나의 진리에서 나온 것들이다. "클래스 구현시, non-member, non-friend function 으로 만들 수 없는 함수만, member 함수로 만들어라."
이번 항목의 요약을 책에서 그대로 옮긴다.
분활과 캡슐화는 좋은것이다. 특히 C++의 경우에는, 알고리즘과 컨테이너를 분리시키는 것이 좋다. STL도 대부분 그런 원칙에 따라 만들어 졌다.
basic_string의 멤버 함수가 너무 많다는 점은 대체로 공감을 얻고 있는 것 같다. 103개의 함수들 중 반드시 멤버가 되어야 할 것들은 32개 밖에 되지 않으며, 나머지 71개는 효율성을 잃지 않고도 비멤버 비친구로 구현할 수 있다. 사실 103개의 멤버들 중에는 이미 존재하는 알고리즘들과 가능성이 겹치는 것들도 많고, 또 basic_string에 국환되지 않은 일반적 알고리즘이 되었다면 더 유용했을 것들도 많다.
독자가 라이브러리를 설계할 때에는 basic_string의 실수를 반복하지 말기 바란다. 알고리즘과 컨테이너를 분리하고, 특별한 행동(효율적인 부분 문자열 검색처럼)이 필요한 부분에는 템플릿 특수화나 중복적재를 사용하고, 이 4부에 나온 모든 지침들을 따른다면 더 나은 설계가 될 것이다. 그러면, 사용자가 외워야 할 것은 적어지고 할 수 있는 일은 더 많아질 것이다.
총평
.. 개념적으로 "무엇이 캡슐화를 깨는가?", "캡슐화는 어떻게 완성 되나?", "보다 좋은 객체 지향은 어떻게 만들 수 있는가?", "어떻게 하면, 더 견고하고 독립적인 클래스를 만들 수 있는가?" 에 대한 질문들의 답들을 1~4부에서 설명해 주는거 같았다.
아직 더 .. 수행해야 한다.
'책 정리 > Exceptional C++ Style' 카테고리의 다른 글
Exceptional C++ Style (익셉셔널 C++ 스타일 : ECPPS ) 목차 (0) | 2009.02.10 |
---|---|
항목 39 : 일체적 클래스의 해악, 3부 : std::string 살 빼기 ( 난이도 : 5 ) (0) | 2009.02.04 |
항목 38 : 일체적 클래스의 해악, 2부 : std::string 리팩토링 ( 난이도 : 5 ) (0) | 2009.02.04 |
항목 37 : 일체적 클래스의 해악, 1부 : std::string의 사례 ( 난이도 : 3 ) (0) | 2009.02.02 |
항목 36 : 생성되는 객체를 가진 공용체 ( 난이도 : 4 ) (0) | 2009.02.02 |
항목 35 : 일반적 콜백 ( 난이도 : 5 ) (0) | 2009.02.02 |
항목 34 : 색인 테이블 ( 난이도 : 5 ) (0) | 2009.02.01 |
항목 33 : 연산자 놀이 ( 난이도 : 4 ) (0) | 2009.02.01 |
항목 32 : 오타 또는 C++의 생소한 표기법 (0) | 2009.01.26 |
항목 31 : 이상한 코드 ( 난이도 : 4 ) (2) | 2009.01.26 |
최근댓글