소스코드리뷰(XXXI) 재사용을 염두에 두라

[목차(도우미)]
작은 함수가 재사용하기에 좋다는 것은 이미 누차 강조한 바가 있지만 아무리 강조해도 지나침이 없다. 한번은 도서관에서 좀더 SQL(Structured Query Language)의 언어 사양을 찾아볼 생각으로 책을 찾아 보고 있었다. 그런데 EC사이트 구축을 위한 책이 한권 있어서 둘러보게 되었는데, 내용은 매우 초보적인 것이었고, 저자의 주장이 너무 우스워서 서평아닌 평론을 메모하기로 한다.

저자의 주장은 짧은 함수를 만드는 것은 함수를 만든 사람이나 알수 있는 것이고 평이하게 프로그램을 작성하는 것이 낫다는 요지이다. 예를 들어
int main(){
printf("foo, this is a test");
printf("Second line.");
printf("What a nice program!");
}
이렇게 내용을 직관적으로 나열한 것이 잘게 나눈 함수형 구성보다 낫다는 주장이다.

int main(){
  firstTest();
  secondLine();
  farewell();
}
int firstTest() {...}
int secondLine(){...}
int farewell() {...}

논증법에 관하여 말하자면 한이 없는 것이고, 단지 생각의 관점을 바꾸어 논의하고자 한다. 함수의 크기( 줄수)에 관하여 일정한 기준을 제시할 수는 없지만, 함수(function)에서 사용자에게 보이는 출력이 동반될 경우에는 아무리 작은 함수가 되더라도 독립된 함수를 만들라는 것은 실용적이다. 바꾸어 말하면,
유저에게 표시되는 부분은 독립된 함수를 만들라.

흔히 말하는 메시지박스에 관한 처리를 한개의 독립된 함수로 만들어 두면 재사용하기에 편리할 때가 온다. 함수를 만든 사람과 사용하는 사람이 틀린 경우가 있는 팀에서는 설계와 동시에 함수 사양을 공개해두어야 한다. 그리고 함수명을 보고 내부 기능을 짐작할 수 있도록 해야 한다.

요즘은 긴 함수명을 쓰기 보다는 하나의 클래스로 묶어서 설계하기 때문에 긴 함수명을 쓰기 보다는 직관적인 이름을 추천한다.

다중 루프를 사용하게 된다면 어딘가 소스코드에 논리적 결함이 있다고 보아야 한다. 2중 루프는 준수한 편이지만 3중 루프를 쓰고 있다면 로직 설계에 결함이 없는지 살펴보고 작은 함수로 분리하라.

한 예로, jQuery가 자바스크립트로 인기를 얻고 있는데, 여기서는 거의 루프를 사용할 일이 없다. 이것은 가히 획기적인 프로그래밍 기법이라고 말할 수 있을 것이다.
by 금메달.아빠 on 2011. 3. 2. 00:18