- Refactoring 서문
리팩토링은 소프트웨어 시스템의 원래 기능은 그대로 두면서 내부의 구조를 개선하는 것을 의미한다. 그것은 버그의 가능성을 최소화하기 위해서 코드를 깔끔하게 정리하는 엄정한 방법이다. 한마디로 리팩토링을 한다는 것은 이미 작성된 코드의 설계를 나중에 개선하는 것이다.- 임백준의 소프트웨어 산책 중
리팩토링은 새로운 코드를 만들면서 미래를 향해 나아가는 프로그래밍이 아니라, 이미 존재하는 코드를 부수면서 과거로 뛰어드는 프로그래밍이다. 마치 미래의 전쟁에서 승리하기 위해서 과거로 뛰어든 영화 터미네이터의 주인공처럼 프로그래머는 과거로 돌아가서 미래를 코딩한다. 그 때 그들의 손에 들린 무기가 바로 리팩토링이다.
툴을 이용한 리팩토링도 가능합니다. 마소의 "리팩토링을 통한 프로젝트 망치기"를 보면 툴 지원 없이 섣불리 리팩토링하지 말라는 내용이 나옵니다. 리팩토링으로 프로그램의 버그가 증가한다면 오히려 해가 되겠지요. C++ 리팩토링 툴로는 Visual Studio .Net 2003 버전을 지원하는 Ideat Solutions의 Ref++ 가 있고(현재 Ideat Solutions는 해체되어 더 이상 새로운 버전을 출시하지 않습니다.), 개발자들이 많이 사용하는 Whole Tomato의 Visual Assist X 에도 리팩토링 기능이 따로 존재합니다. Visual Studio .Net 2005 버전에 무료로 사용 가능한 Refactor! 도 있습니다. Visual Assist에서 사용 가능한 리팩토링 기능으로는 이름 변경(Rename), 함수 추출(Extract Method), 필드 캡슐화(Encapsulate Field), 시그너처 변경(Change Signature), 소스파일로 함수 정의부 이동(Move Implementation to Source File), 멤버 함수 / 변수 추가(Add Member), 유사 멤버 함수 / 변수 추가(Add Similar Member), 함수 주석(Document Method), 함수 선언부 생성(Create Declaration), 함수 정의부 생성(Create Implementation) 등의 있습니다. 반복적인 작업을 수월하게 하는 데 도움이 됩니다.
![]() | ![]() |
리팩토링에 있어서 최종 버전이라는 건 있을 수 없습니다. 보통 성공한 온라인 게임의 수명이 10년을 넘기게 되는데, 소스코드가 너무나 완벽해서 10년 넘게 리팩토링 할 내용이 없다는 것은 있을 수 없는 일입니다.
관련 사이트
임백준의 소프트웨어 산책 - 3장 리팩토링 이야기, 임백준
마이크로 소프트웨어 - 2003년 9월호 리팩토링을 통한 프로젝트 망치기(?), 이복연
Refactoring - 마틴 파울러
Posted by

