Refactoring
간단히 말해, "소스코드의 악취를 제거하는 일" 입니다.
불필요한 부분을 제거하고 논리 정연하게 만들어주는 것이 마치 방을 정리하는 일과 비슷하다는 생각이 듭니다.
리팩토링이란 이미 작성한 소스코드에서 구현된 기능, 로직은 변경하지 않고 코드의 가독성과 유지보수성을 높이기 위해 내부 구조만 변경하는 것을 말합니다.
더 쉽게 말하자면, "나쁜 코드를 좋은 코드로 바꾸는 과정"이라고 할 수 있습니다.
위 그림은 마이그레이션의 4가지 방법에 따른 구현 비용을 나타낸 그래프입니다.
'마이그레이션'이란, '이주'라는 단어 뜻 그대로 새로운 하드웨어나 소프트웨어 혹은 둘 모두가 바뀌는 환경을 의미합니다.
소규모 마이그레이션도 있고, 많은 시스템이 새로운 애플리케이션이나 새롭게 재설계된 네트워크로 옮겨가게 되는 대규모 마이그레이션도 있습니다.
- 리호스트: 기존 환경을 변경하지 않고 클라우드 환경으로만 옮기는 방법
- 리팩토: 결과에는 변경이 없도록 하고 애플리케이션의 구조를 약간 변경하는 방법
- 리아키텍트: 애플리케이션의 구조를 처음부터 다시 짜는 방법
- 리빌드: 처음부터 애플리케이션을 재구축하는 방법
아예 구조를 다시 짜고 성능을 최적화하는 과정은 '리아키텍처'에 가까우며, '리팩토링'은 단지 '정리 정돈'에 불과합니다.
하지만 리팩토링이 잘 되어 있어야 '리아키텍처'도 잘 수행할 수 있고 발생하는 마이그레이션 비용을 줄일 수 있으니 절대 간과해서는 안됩니다.
리펙토링 법칙을 잘 따라서 소스코드를 작성하며 혼자 뿌듯해하고 있을 때 방심하면 안됩니다.
클린 코드, 리팩토링 법칙을 최대한 따랐더라도 보는 사람마다 관점이 다르기에 나에게 보기 좋은 코드가 다른 사람에게 보기 좋다는 법은 없으니 말이죠.
그러면 리펙토링은 언제 필요할까요?
1. 유사한 내용이 세 번 이상 반복될 때
2. 새로운 기능을 추가할 때
3. 코드 리뷰를 할 때
4. 레거시 코드가 존재할 때
* 레거시(legacy code) - 누군가 떠나면서 남겨 논 코드를 의미한다. 더이상 쓰기 힘들거나 오류나 버그가 발생되는 오래되거나 나쁜 코드를 의미한다.
그렇다면 리팩토링은 어떻게 할까요?
1. Extract Method: 함수를 분리하자
2. Move Class: 클래스를 이동시키자
4. Rename: 이름을 바꾸자
5. Consolidate conditional expression: 중복 조건식을 통합하자
6. Remove Control Flag: 제어 플래그를 지우자 대신 return을 활용하자
여기까지 리팩토링에 대해 설명해봤습니다.
감사합니다 💟
모두 편안한 오후 보내고 오류 코드 해결하십쇼!