마치 TDD처럼 언젠가는 해야지 하면서 맘속에만 있고 현실로는 적용해보지 못하던 리팩토링을 좀 알기 위해서 집어든 책이다. 나는 자바를 사용하고는 있고 최근에는 MVC Model 2니 해서 클래스의 사용을 좀 높이고 있기는 하지만 자바가 객체지향언어임에도 불구하고 나는 여전히 절차식 프로그래밍을 하고 있다.
단순히 재사용성을 위해서 클래스를 사용하고 있을뿐 전혀 객체지향이라고 할 수 없는 개발을 하고 있고 이런 거는 대부분 마찬가지일 것이다. 항상 코드를 더 좋게 만들고자 하는 마음은 있지만 현실적으로는 적용하기가 쉽지 않고 그에 대한 지식을 쌓는 것도 만만치 않다.
이 책의 저자인 마틴 파울러는 리팩토링에 흠뻑 빠져 있는 것을 느낄 수 있으며 초기에 아주 간단한 리팩토링의 예제를 보여주고는 리팩토링이 무엇이며 어떻게 해야 하는 가를 설명하면서 개발자들이 리팩토링을 하려고 할때의 고민들은 하나하나 설명해 주고 있다.
이 책에서 마틴 파울러가 설명하고 있는 리팩토링에 대한 개념중 가장 맘에 드는 것은 리팩토링을 하면 언제든 더 좋은 디자인으로 바꿀 수 있다는 것이다. 항상 초기 설계할때 좋은 설계, 좋은 디자인을 하는 것은 매우 중요하지만 우리 모두 현실적으로 이것이 쉽지 않은 것임을 알고 항상 설계와 디자인은 개발과정에서 수없이 바뀌게 마련이다. 하지만 리팩토링을 잘 할수 있는 사람은 이에 대한 걱정이 없다는 것이다. 일단 코드를 짜고 잘못된 부분이 있거나 의도하지 않은 방향으로 갔으면 언제든지 리펙토링으로 더 좋은 디자인으로 코드를 수정할 수 있다는 것이다.
간단한 개념 설명뒤에는 대부분의 책 내용을 실제 리팩토링을 할 수 있는 예재로 보여주고 있다. 자바를 기준으로 예제를 보여주고 있기 때문에 자바개발자라면 어느정도 이해할 수 있을 것이고 개념은 좀 어렵더라도 해당 리팩토링 예제에만 집중할 수 있도록 간단하게 예제를 작성해 놓았기 때문에 그렇게 다다가기가 어렵지는 않을꺼라고 생각한다. 각 리팩토링을 단위별로 뽑아내어서 설명하고 있다. Extract Method, Move Method등 하나하나 단위화 하여서 처음 배우는 사람이 최대한 접근하는 것이 쉽도록 제공하고 있다.
물론 다 읽고 난 후에도 이런것은 적용하는 것이 쉽지 않다고 생각하고 있다. 리팩토링을 하려면 어떤 부분을 리팩토링해야 되는지 알아야 하고 그 부분을 찾으려면 어떻게 리팩토링해야 하는지 확실히 알고 있어야 하는데 현실에서의 코드는 여기의 나와있는 예제처럼 명확치 않을 것이 확실하기 때문에 쉽지 않다. 여기 나오는 수십개의 예재를 다 외우고 있을 수도 없고 외우고 있다고 하더라도 이걸 현실에서 적용하려면 단순히 외운것 만으로는 할 수 없고 실제 경험적으로 알고 있어야 한다. 책을 옆에 두고 있다고 하더라도 적용하기는 보통의 노력으로는 쉽지 않을 것이다.
하지만 나에겐 이게 크게 가치있어 보인다. 리팩토링은 그만큼 매력적으로 보이고 아직 OOP를 제대로 알지 못하는 나에게도 이 책을 보면서 객체지향이 어떤것인지 약간은 개념을 잡을 수 있었다. (이걸로 객체지향을 알게 되었다면 웃긴 일이겠지만... ㅋ) 마틴 파울러가 얘기하는 것 중에서 메소드를 추출할 때 주석단위로 추출해서 메소드명을 명확히 하여서 주석자체가 필요없게 한다는 것은 꽤나 멋진 아이디어라고 생각했고 내가 추구하는 개발방향하고도 맞아떨어진다고 생각한다.
결국 이런 개념을 현실로 적용하려면 아주 간단한 거부터 적용하기 시작하는게 최고라고 생각한다. 그리고 물론 여기서 리팩토링을 한다는것 더 괜찮은 객체지향코드로 바꾼다는 것이기 때문에 리팩토링을 하기 전에 객체지향부터 확실히 이해해야 될듯하다. 그걸 제대로 이해못하면 객체지향 자체가 어렵기 때문에.... 하나하나 붙잡고 지속적으로 노력해서 경험을 통해서 감을 잡는 수밖에 없을듯 하다. 그래도 마틴파울러가 어떤걸 어떻게 바꾸어야 하는지는 다 적어놨으니....
Comments