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부에서 설명해 주는거 같았다.

아직 더 .. 수행해야 한다.


신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요