개발

[리팩토링] - (1) 리팩토링 원칙

madison 2022. 6. 19. 16:02

리팩토링이란?

리팩토링은 기존의 기능을 보존하면서 디자인,구조를 개선하는 프로세스이다.  

Refactoring is a process of improving your codebase without creating new functionality. 

 

According to Martin fowler, author of two books on refactoring, 

Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure. It is a disciplined way to clean up code that minimizes the chances of introducing bugs.

 

 

리팩토링시 고려하는 문제 

리팩토링은 클린코드나 바람직한 엔지니어링 습관 같은 이유로 하는것이 아니다. 리팩토링의 본질은 코드 베이스를 예쁘게 꾸미는것이 아니라 개발 기간을 단축하고자 하는 것이다. 기능 추가 시간을 줄이고 버그 수정 시간을 줄여준다. 

리팩토링이 아키텍처에 미치는 실질적인 효과는 요구사항 변화에 자연스럽게 대응하도록 코드베이스를 잘 설계 해준다는 데 있다. 

Yagni (You Aren't Gonna Need It") 
: Don't implement a feature untill there is need for it. 
https://martinfowler.com/bliki/Yagni.html  

이런식으로 설계하는 방식을 simple design, incremental design, YAGNI 등으로 부른다. 

 

리팩토링의 단계 

1. Always start from green

테스트에 실패하는 로직이 있다면 절대로 리팩토링 하지 않는다. 리팩토링은 테스트 코드가 통과하였을때 진행한다. 

2. Extract logic code and apply the basic refactoring tips 

여러 리팩토링 기법을 점진적으로 적용해 나간다. 

 

리팩토링하지 말아야 할 때 

1. 지저분한 코드를 발견해도 굳이 수정할 필요가 없다면 리팩터링 하지 않아도 된다

2. 리팩토링 하는 것보다 처음부터 새로 작성하는게 더 쉬울때도 하지 않는다. 

3. 직접 건드릴 일이 거의 없거나, 불편한 정도가 그리 심하지 않다고 판단되면 리팩토링 하지 않는다. 

 

리팩토링 중 피해야하는 작업 

리팩토링 진행 중 버그 수정, 기능 변경, 성능 개선은 피해야 한다. 리팩토링의 목적은 버그 수정이 아니라 버그 수정을 쉽게 할수있는 구조로 바꾸는 것이다. 

 

 

 

 

 

참고 ) 리팩토링 - 마틴 파울러