1 ) string::resize가 비멤버 함수가 될 수 있을까? 설명하라.

될 수 있다. 공개 인터페이스로 확장시켜 놓고 swap 시키면 되는데 소스코드를 보자.

5 라인, 할당 될 수 있는 최대 크기(s.max_size()) 보다 재할당 하려는 크기(n)가 더 크다면, 예외 발생 시킨다.
7 라인, s의 자신의 크기(s.size()) 보다 재할당 하려는 크기(n)가 작다면, 복사 할당자를 이용하여, 지정한 사이즈 만큼만 복사 한 뒤 swap 해버린다.
16 라인, 5라인 7라인 비교가 아니라면, 그냥 뒤에 붙여 버린다.

22 라인, .. 매개변수 3개짜리로 구현한다.(이런 방법은 아주 흔하게 사용 하는 방법이다. 미리 만들어진 함수를 이용하여 좀 더 사용하기 편한 함수를 만들어 두는 방법 말이다. ^^ )

이렇게 비멤버로 구현 할 수 있다.


2 ) std::string의 다음 멤버 함수들을 분석하고, 비멤버 함수들이 될 수 있는지(또는 되어야 하는지) 설명하라.

a. assign 과 +=/append/push_back

다 가능하다. 모두 할당을 동반하므로 "할당하고자 하는 함수"만 멤버면 손쉽게 가능하다.

b. insert

앞에서 먼저 멤버로 해야 한다고 지정해 두었는데, a의 함수들이 insert를 이용하여 손쉽게 구현 가능하다.


총평

심각하게 한가지 생각이 떠나지 않는다 "이렇게 까지 비멤버로 구현 한다해도, 재사용 가능한것은 몇개 없지 않나?" 공부 하는데 있어 이런 생각은 무척 나쁘다. 왜냐하면 그대로 받아 드리지 못하기 때문이다.

나름대로 정리해 본다면, "재사용 될 일이 없다면, 굳이 non-member non-friend function 으로 뺄 필요가 없다" 로 나는 이해가 된다. 만약 가장 크게 보는 관점이 "클래스의 단순함" 이라면, 비멤버로 빼는게 더 이해하기 편하다. 왜냐하면 리팩토링이 더 쉬워지기 때문이다.



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

댓글을 달아 주세요