- 겉으로 드러난 기능은 그래도 두고, 알아보기 쉽고 수정하기 간편하게 소프트웨어 내부를 수정하는 작업
- 리팩토링 기법을 연달아 적용해서 겉으로 드러나는 기능은 그대로 둔 채 소프트웨어 구조를 변경한다.
리팩토링의 목적은 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것이다. 그리고 리팩토링은 겉으로 드러나는 소프트웨어 기능에 영향을 주지 않는다.
리팩토링은 소프트웨어의 모든 문제를 해결하는건 아니지만 코드를 쉽게 이해할 수 있게 도와준다.
리팩토링은 다양한 용도로 사용이 가능하다.
소프트웨어 개발 프로젝트는 대부분 동료 팀원과 함께 진행하게 된다.
따라서 특정 코드를 작성할 때 동료 개발자를 고려해야 한다.
리팩토링을 하면 코드를 더 파악하기 쉬워진다.
기능은 정상 동작하지마 구조가 완전하지 못한 코드에 대해 실시한다.
불필요한 부분을 제거하다 보면,본연의 목적에 충실해지는 코드가 완성된다.
리팩토링 작업을 하면 전체 코드를 살펴보게 되고, 코드를 파악하기 쉽게 변경하다 보면 버그 발견도 쉬워진다.
깔끔한 설계는 개발 속도를 높이기 위한 핵심이다.
설계가 깔끔하지 않으면 시간이 지날수록 속도는 더디게 된다.
반면에 깔끔한 설계는 소프트웨어 개발 속도를 적절히 유지 시키는데 반드시 필요하다.
리팩토링을 하면 설계가 깔끔해지며 새로운 기능을 추가하는 작업을 빨리 진행할 수 있다.
리팩토링은 일부로 시간내서 하는 작업이 아닌, 일상적으로 틈틈히 진행해야 하는 작업이다. 다른 작업을 해야 하는데 리팩토링을 통해 그 작업을 쉬워지게 하기 때문이다.
어떤 작업이 세번 반복된다면 리팩토링을 필수로 해야한다.
리팩토링이 필요한 첫번째 상황은 소프트웨어에 새로운 기능을 추가할 때이다.
새로운 기능을 추가하려면 기존 코드를 분석해야한다.
기존 코드는 나 혹은 동료가 작성했을 것이다.
코드의 기능을 파악하고 리팩토링이 필요한지 고민하고 리팩토링 작업을 진행한다.
두번째 상황은 설계가 지저분해서 어떤 기능을 추가하기 힘들때이다.
특정 기능을 추가하려고 보니 기존에 설계된 구조에서는 어렵다고 판단되면 리팩토링을 진행한다.
과거에는 이 기능이 들어온다고 생각하지 못했을 수 있기에 설계를 수정하고 리팩토링을 진행한다.
버그를 수정할 땐 주로 코드를 이해하기 쉽게 만들면서 리팩토링을 한다.
버그가 발생한 기능에 해당되는 코드를 쉽게 파악하기 위해서 리팩토링을 작업하게 된다.
그 과정을 통해 버그가 발생한 지점을 찾기가 수월해진다.
코드 검수는 개발 팀원 모두가 전체 코드를 파악하게 되고,
선베 개발자가 후배에게 지식을 전수하는 효과도 얻게된다.
리팩토링을 하면 다른 사람이 개발한 코드를 검수하는게 수월해진다.
의견만 제시하는 것이 아닌 아이디어가 실제 구현하면 도움이 될지 고민하고 가능하다고 판단되면 리팩토링을 실시할 수 있다.
리팩토링을 장점을 얻으려면 리팩토링 작업을 하는 것도 중요하지만 과정을 모니터링 하는 것도 중요하다.
리팩토링에서 문제되는 부분 중 하나는 데이터베이스이다.
수 많은 비즈니스 애플리케이션은 데이터베이스 스키마와 강력하게 결합되어 있다.
이러한 점 때문에 데이터베이스 수정이 어려워진다.
또한, 데이터 이전 문제가 발생할 수 있다.
데이터베이스와 객체 모델의 상호 모델의 상호 의존을 최소화하려고 해도,
데이터베이스 스키마를 수정하면 데이터를 이전해야 하는데 이 작업은 시간이 오래거릴 뿐만 아니라 위험성이 높다.
인터페이스를 건드리지 않고 내부의 구현 코드를 수정할 수 있는 것이 객체의 장점 중 하나이다.
하지만, 인터페이스를 수정하면 어떤 문제가 발생할지 예측이 불가능하다.
리팩토링에서 불안한 점은 상당수의 리팩토링이 인터페이스를 건드린다는 것이다.
설계 자체에 오류가 있거나 설계에 대한 결정이 나중에 바뀌었을 때
혹은 수정이 힘든 사항에도 대부분 리팩토링으로 해결된다.
코드를 처음부터 새로 작성해야 하는 상황일 때는 리팩토링을 하지 말아야 한다. 기
존 코드가 복잡한 경우에 리팩토링을 할 수 있지만, 차라리 새로 코드를 작성하는 것이 쉬울 수 있다.
일정이 임박한 경우에는 리팩토링을 하지 않는 것이 좋다.
일정이 없는 상황에서 리팩토링을 진행하면, 예상한 일정보다 늦게 결과물이 나올 수 있다.
일정이 임박한 경우가 아니라면 리팩토링을 반드시 해야 한다.
참고: https://lelecoder.com/106 [lelecoder]