최근의 내 성향은 사전설계에 꽤나 치중하고 있는 편인데, 오늘 서점에서 본 Refactoring to Patterns라는 책이 내게 신선한 감각을 제공했다.
물론, 완전히 새로운 내용은 아니고, 지금까지 내가 해왔던 여러 행동들에 각각 이름을 붙여 세련되게 정리했다고 할까.

기존의 스타일이 워낙 두서가 없지만, 대강이라도 단계를 나눠 보자면 이렇다.

1.요구사항을 파악한다.
2.요구사항에 따라 필요한 클래스들을 구상하고, 다이어그램을 그린다
3.클래스 명세에 따라 각각의 메소드의 정의를 작성한다.
4.일부분이라도 완성되면 간단하게 테스트해본다.
5.버그가 존재하는 것 같다면 – 구현의 내용을 재고하고 수정한다.
6.문제없이 돌아간다면, 다음 기능을 구현한다.
7.모든 클래스가 완성될 때까지 3~6을 반복한다.

이런 내 스타일을 이 책에서는 TDD(Test-Driven Development)라고 서술하고 있다. 하지만 경험상 이 방법의 문제는 코드가 스파게티 급으로 비효율적으로 꼬여 간다는 것이다. 그래서 디자인 패턴이란 것을 접한 뒤로는 패턴 카탈로그를 옆에 끼고 하지는 않더라도, 항상 사전 설계에 치중해 왔었다. 물론, 군대에 묶인 몸이라 필요한 시간에 바로바로 PC앞에 앉아 코딩을 할 수 없는 상황도 그런 성향을 부추기긴 했지만, 잭슨 폴록도 말했잖은가, “모든 작품은 구상한 만큼 나온다”고.

하지만 아무리 나름의 치밀함을 가진 설계를 토대로 코딩을 시작한다 쳐도, 실제 코딩에서는 적용할 수 없거나 원하는 대로 작동하지 않는 설계가 많았다. 그래도 어떻게든 그에 맞춰 구현을 하려고 발악을 하다 보니, 나중에는 어떻게 수정을 하려고 해도 손 댈 수조차 없게 되어버리는 경우가 많았다. 만약 이게 실무현장에서 진행중인 프로젝트라면 이 악물고 날밤 까서 고쳐놓겠지만, 아마추어인 나는 프로젝트를 쉽사리 포기해버린다. 집어치우고 다른 아이디어나 구현해볼까~하고.

그런 나에게 이 “패턴을 활용한 리팩터링”은 더 높은 레벨로 올라가기 위한 길을 보여주었다. 요컨대 쌓여 있는 코드 덩어리를 정리하는, 일종의 “방법론”을 설파하는 책이라고 할까. 기존에 내가 작성하던, 스파게티 급으로 난잡해진 코드를 머릿속으로 정리하는 것을 상상해 가며 읽어보니, 이것은 확실히 도움이 된다.

필드나 메서드의 이름을 바꾸는 간단한 리팩터링부터 코드를 쪼개고 붙이고 정리하는 여러가지 방법을 보여 주는데, 이것은 평상시에도 해 왔던 작업이지만, 이 작업을 방법론적인 면에서 지도를 받으며 한다면 사전설계에 지나치게 치중하지 않고도 적당한 설계로 시작해서 견고하게 잘 결합된 코드를 작성하는 것이 가능할 것으로 보인다.

단지, 이 책이 당장의 나에게 필요한 것은 아니었으므로, 굳이 구입할 생각은 들지 않았다.

전역한 후 “Refactoring”과 Design Pattern을 구입할 때 같이 구해서 공부하면 될 것 같다.