소스코드리뷰(IV) 객체지향 모듈 설계

[목차(도우미)]
소프트웨어의 위기라는 말이 제창되고서 위기를 극복하기 위한 방법과 개발언어가 발전되었다. 다양한 설명을 추가할 수 있겠지만 한번 작성한 소스코드를 또다시 작성하지 않아도 되는 기법을 개발하는 것이 소프트웨어의 위기를 극복하는 골자가 된다.

더많은 참고: http://ko.wikipedia.org/wiki/소프트웨어_위기

소프트웨어 위기는 여전하다

이제는 객체지향(Object Oriented) 기법이 유행하고 있지만 개발 현장에는 여전히 "객체지향=클래스"이며 "클래스 계승"을 객체지향의 핵심으로 오해하는 경향이 있다. 하나의 클래스가 응용프로그램내에서 단 한번만 쓰기 위해 설계되는 경우가 많다. 그 클래스가 나중에 다시 쓰이는 가능성도 없다. 이것은 구조적 프로그램으로 바뀐 이점 이외에 아무런 "위기"를 극복하기 위한 방책이 준비되어 있지 않은 것이다. 개발현장에서는 아직 객체지향 설계가 정통한 수준에 이르지 못하고 있다. 그런 의미에서 향후 적어도 10년은 객체지향 설계가 유행할 것이다. 일부 객체지향 설계보다 양상지향(Aspect Oriented)이 대두되었지만 아직 객체지향다운 설계에 도착하지 못하고 있다.

원숭이,동물원

(조그만 원숭이들이 먹이를 먹고 있는데 공작이 날아와서 먹이를 맛있게 뺏어 먹고 있다. 사육사는 처음부터 공작이 먹을 먹이를 염두에 두는 것일까?)

모듈 단위로 재활용하라

  객체지향을 구현하기 위한 중심에 클래스가 있지만, 클래스가 아니어도 객체지향은 가능하다. 객체지향의 내용은 잘모른다 해도 그 지향점인 재활용을 위한 모듈 설계를 염두에 두어야 한다. 예를 들면 ASP 디버그용 모듈을 작성할 때도 처음부터 스타일시트(debug.css), 스크립트(debug.js), HTML 요소(debug.elm), ASP 모듈(debug.asp)를 분리해 두면 서버측 스크립트가 ASP가 아닌 PHP, JSP등으로 바뀌어도 클라이언트측 모듈은 그대로 활용가능하다. 

재활용 가능한 모듈을 설계하려면

  • 작은 함수 개발이 관건이다.
  • 모듈내에서는 관련된 함수만 모은다.(응집도를 높인다.)
  • 모듈간에는 관련성을 배제한다.(결합도를 낮춘다.)
기존 함수 복사해서 새로운 프로젝트에 활용하는 것은 누구나 경험이 있다. 인터넷에서 돌아다니는 공개 소스를 검색해서 자신의 프로그램에 적당히 변수를 바꾸어서 집어 넣는 것이다. 이런 함수/프로시저가 모듈내에 배치될 때는 재활용 가능한 형태로 배치하여 나중에 유사 프로젝트를 수행할 때는 함수 단위로 복사하는 것이 아니라 관련 모듈 파일 단위로 참조만 하면 되도록 설계/배치해야 한다. 이런 모듈은 하나의 클래스가 되어도 좋고 함수군(이른바 유틸리티 클래스)이 되어도 좋다.

한번 개발한 모듈/함수를 다시 쓸수 있도록 처음부터 염두에 두면, 실로 많은 것을 배울 수 있다.
by 금메달.아빠 on 2010. 5. 23. 00:51