리팩토링은 고도의 추상화 능력이 아닐까

1 minute read

리팩토링. 김창준의 언급

많은 사람들이 이 책에서 놓치는 것들이 있다. 후각 능력 강화 : 내가 2001년도 마소에 기사로 썼다. 리팩토링에서 후각의 중요성에 대해(일취집중후각법 등). 사람들은 이런 저런 리팩토링이 있다는 것에 집중하는 경우가 많은데, 그 이상 중요한 것은 이런 저런 것이 나쁜 냄새에 해당한다는 걸 감지하는 능력이다. 나쁜 냄새 목록을 외운다고 될 일이 아니다. 리팩토링을 아무리 잘 외워도 지금 이 코드에서 나쁜 냄새가 나는지 맡지 못하면 아무 쓸모가 없다.

메커니즘의 중요성 : 처음에 리팩토링 책을 보면서 의아해 했던 점이 있었다. 왜 이렇게 메커니즘(리팩토링을 수작업으로 하는 지리한 과정)을 각 단계별로 설명하는 데에 지면을 허비하고 있나. 근데 이 부분은 2002년쯤 OORP(Object Oriented Reengineering Paterns)를 스터디하다가 깨달았다. 이게 얼마나 중요한지를. 이걸 IDE에서 지원하는 자동기능으로만 수행을 하면 절대 훈련이 될 수가 없다. 리팩토링의 핵심은 one small step at a time이다. 메커니즘은 이걸 안전하게 하는 방법을 각 리팩토링별로 예시를 보여주고 있다. 이 메커니즘을 따라하면서 그 이면의 원칙을 깨달아야 한다. 그러려면 왜 하필 이 순서인가를 자문해야 한다.

이 두가지가 잘 되어야 소위 전이(transfer of learning)가 잘 일어날 수 있다. 즉, 책에서 설명하지 않은 상황에서 설명하지 않은 리팩토링을 설명하지 않은 메커니즘으로 진행할 수 있다. 예를 들면 YAML 같은 데이터 언어라든가, 심지어는 아키텍쳐 레벨에서의 리팩토링 등.

어떻게 공부할까? 프로그래머를 위한「공부론」

코드는 언어보다는 기능 구현에 대한 추상적인 사고를 구체화시키고 체계적인 아키텍쳐로 만드는 과정이 중요하다고 생각이 든다.

처음 시작은 현재 하고 있는 일을 분류하고 순차적으로 실행시키는 것에서 시작하지만 나중에는 정보와 움직임을 구분하고, 이러한 구분 안에서 각각을 체계적으로 정리할 수 있게 된다.

즉, 일이라는것이 어떻게 구성이 되는지 모듈화와 캡슐화, 각 요소들을 조건에 의한 분기와 반복을 통해 기대하는 효과가 극대화될 수 있는 형태로 만들어가는 것이다.

이 과정에서 발생하는 여러가지 반복과 중복되는 내용들을 지속적으로 파악하고 이를 제거하는 과정에서의 추상화 고도화 과정을 통해 보다 더 효율적인 코드로 발전해 나가는 것이다.

이를 위한 여러가지 도구들은 이 과정을 먼저 겪은 사람들의 어떤 문제의식 속에서 나온 것이기 때문에 그 문제의식 혹은 이유에 대해서 고민하지 않고서는 도구를 제대로 활용하기 어렵다

나 같은 경우에도 가장 기본적인 순차적 프로그래밍에서 시작해서 코드가 보다 효율적으로 작동하다록 만드는 과정에서 여러가지 스택들을 익혀왔다.

아직 내가 어디 즘에 놓여있는지 가늠하기는 어렵지만 어쨋든 기술의 세계로 어느 정도는 입문을 하고 있다는 생각이 든다.