l._.been 2023. 4. 18. 16:22
728x90

간단히 말해, "소스코드의 악취를 제거하는 일" 입니다.

불필요한 부분을 제거하고 논리 정연하게 만들어주는 것이 마치 방을 정리하는 일과 비슷하다는 생각이 듭니다.

 

깔끔한 방 == clean code

리팩토링이란 이미 작성한 소스코드에서 구현된 기능, 로직은 변경하지 않고 코드의 가독성과 유지보수성을 높이기 위해 내부 구조만 변경하는 것을 말합니다. 

더 쉽게 말하자면, "나쁜 코드를 좋은 코드로 바꾸는 과정"이라고 할 수 있습니다.

 

Rehost, Refactor, Rearchitect, Rebuild의 구현 비용

위 그림은 마이그레이션의 4가지 방법에 따른 구현 비용을 나타낸 그래프입니다.

'마이그레이션'이란, '이주'라는 단어 뜻 그대로 새로운 하드웨어나 소프트웨어 혹은 둘 모두가 바뀌는 환경을 의미합니다.

소규모 마이그레이션도 있고, 많은 시스템이 새로운 애플리케이션이나 새롭게 재설계된 네트워크로 옮겨가게 되는 대규모 마이그레이션도 있습니다.

 

  • 리호스트: 기존 환경을 변경하지 않고 클라우드 환경으로만 옮기는 방법
  • 리팩토: 결과에는 변경이 없도록 하고 애플리케이션의 구조를 약간 변경하는 방법
  • 리아키텍트: 애플리케이션의 구조를 처음부터 다시 짜는 방법
  • 리빌드: 처음부터 애플리케이션을 재구축하는 방법

아예 구조를 다시 짜고 성능을 최적화하는 과정은 '리아키텍처'에 가까우며, '리팩토링'은 단지 '정리 정돈'에 불과합니다.

하지만 리팩토링이 잘 되어 있어야 '리아키텍처'도 잘 수행할 수 있고 발생하는 마이그레이션 비용을 줄일 수 있으니 절대 간과해서는 안됩니다.

 

리펙토링 법칙을 잘 따라서 소스코드를 작성하며 혼자 뿌듯해하고 있을 때 방심하면 안됩니다.

클린 코드, 리팩토링 법칙을 최대한 따랐더라도 보는 사람마다 관점이 다르기에 나에게 보기 좋은 코드가 다른 사람에게 보기 좋다는 법은 없으니 말이죠.

그러면 리펙토링은 언제 필요할까요?

 

1. 유사한 내용이 세 번 이상 반복될 때

2. 새로운 기능을 추가할 때

3. 코드 리뷰를 할 때

4. 레거시 코드가 존재할 때

 

* 레거시(legacy code) - 누군가 떠나면서 남겨 논 코드를 의미한다. 더이상 쓰기 힘들거나 오류나 버그가 발생되는 오래되거나 나쁜 코드를 의미한다.

 

그렇다면 리팩토링은 어떻게 할까요?

 

1. Extract Method: 함수를 분리하자

2. Move Class: 클래스를 이동시키자

4. Rename: 이름을 바꾸자

5. Consolidate conditional expression: 중복 조건식을 통합하자

6. Remove Control Flag: 제어 플래그를 지우자 대신 return을 활용하자

 

 

여기까지 리팩토링에 대해 설명해봤습니다.

감사합니다 💟

모두 편안한 오후 보내고 오류 코드 해결하십쇼!