일반화 프로그래밍의 가장 큰 매력은 코드의 재사용이다. 이번 항목은 "어떻게 좀 더 일반화 시킬 수 있지?"를 생각해 보는 항목이다.


1 ) 일반적 클래스나 함수를 설계하고 작성할 때 추구해야 할 사항들로는 무엇이 있는지 설명하라.

내 경우는 간단함과 직관적인 함수명, 마지막으로 재사용 이다. 책에서는 필요 이상의 형식 제한을 피하고, 필요 이상의 기능성을 제하고, 필요 이상의 일체적 설계를 피하는 것을 추구해야 한다고 한다.


2 ) 다음 코드는 콜백 함수를 감싸는 흥미롭고도 유용한 관용구를 보여준다. 좀 더 자세한 설명은 원래의 글[Kalev01]을 참고하기 바란다.

다음 코드를 비평하고 다음을 지적해라.

a. 이 코드를 좀 더 관용구적으로 사용할 수 있게 하는 데 필요한 설계상의 스타일 개선 사항들은 무엇인가?

ㄱ. 생성자를 explicit 으로 만들 것

암묵적인 변환을 일채 막기 위함이다. 이것은 더 보기 좋은 코드를 만들어 준다.


ㄴ. 주석을 잘못 달지 말 것

배정이라는 표현은 부정확하니, binding 으로 표현하라고 한다. 우리나라 말로 하면, 결합 이라고하는데. ... 여기까지 신경 쓰다니 필자는 참 섬세하다.


ㄷ. execute 함수를 const 로 할 것

왜냐하면 내부 요소를 전혀 변경 시키지 않기 때문이다. const를 사용해보면 알겠지만 무척 재미있어 진다.


ㄹ. execute 함수는 operator() 로 할 것

왜냐하면 함수를 호출하는 할 떄는 함수 호출 연산자를 사용 하는것이 관용구이기 때문이다.


b. 이 코드의 유용성을 제한하는 기술적 제약 사항들은 무엇인가?

ㄱ. 콜백 함수를 템플릿 매개변수가 아닌 보통의 매개변수로 넘길 것,

왜냐하면, 템플릿 매개변수가 되어야 하는 것이 아닌 한, 일반적인 보통 함수로 만들어, 매개변수를 넘기는게 좋다.


ㄴ. 컨테이너화를 가능하게 할 것,

어찌 보면 함수 객체이기 때문에, 컨테이너에도 넣을 수 있도록 하는게 더 일반화 되어 진다고 볼 수 있다.


ㄷ. 다형성을 가능하게 할 것

base 클래스를 만들어서, 다형적으로 여러개의 콜백함수를 제어 할 수 있게 해주자는 취지인거 같은데, .. 필요하다면, 좋겠지만, 필요도 없는데 굳이 만들 필요는 없는 것으로 생각 된다,


ㄹ. 형식 유도를 돕는 make_callback 함수를 만들 것

std::make_pair 의 편리성을 안다면, 손 쉽게 설명 되어 진다.


ㅁ. 다른 콜백 서명들에 대한 지원을 추가 할 것

template 을 더 늘려서 더 확장성을 고려 하자는 취지로 생각 된다.


총평

그렇게 어려운 스타일을 말하는게 아니기 때문에, 쉬엄 쉬엄 읽을 수 있는 항목으로 생각 된다.

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

댓글을 달아 주세요