본문 바로가기
프로그래밍

리팩터링이란?? Refactoring

by 지나팩 2022. 1. 21.

리팩토링? 사실 코딩을 하면서 리팩토링이란 용어를 잘 들어보진 못했다. 코딩지식이 얕다보니 모르는 것들이 너무 많습니다. ㅜㅜ 그나마 최근에 와서야 리팩토링, 리팩토링 하길래 간략하게나마 알아본 게 전부입니다.

 

구글 신 검색 결과 

 

"리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 한다. 주로 가독성을 높이고 유지보수를 편하게 한다. ... 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다." 라고 하네요. 그러니까 이미 작성한 코드와 코드의 구조들을 더욱 효율적으로 만드는 것이라고 할 수 있겠네요. 

 

그래서 이 리팩터링을 해야하는 이유는 다음과 같습니다.

  • 결과 지향적으로 코드를 작성하게되면 구조가 망가지게 되고 이는 누적된다.
  • 코드의 디자인을 유지하고 개선시켜준다.
  • 코드의 가독성을 높혀 더욱 이해하기 쉽게 만들어준다.
  • 중복을 제거하여 작업에 대한 코드가 오직 한 곳에 있도록 한다.
  • 버그를 찾는데 도움을 준다.
  • 프로그램 작성 시간을 단축시켜 준다.

 

위 이유만으로도 리팩터링은 꼭 필요할 듯 합니다. 물론 이 외에도 다양한 장점들이 있겠죠. 사실 결과물을 만들어내기에도 급급합니다. 따로 시간을 내어 리팩터링을 할 여유가 없습니다. 그런 시간을 지정해주는 곳이라면 더할나위 없이 좋겠지만... 그렇다면 언제 리팩터링을 해야할까요? 

 

보통 아래와 같은 상황에 리팩터링을 진행한다고 합니다.

  • 삼진규칙 : 3번의 중복이나 같은 행위를 하는 코드가 있다면 리펙터링
  • 새로운 기능을 추가할 때
  • 버그를 수정할 때
  • 코드 검토를 할 때

 

이 말인 즉슨 코딩을 하면서 항상 리팩터링을 염두에 두고 코딩을 하는 것입니다. 일단 결과물을 만들어내고 나중에 따로 시간을 내서 리팩터링을 하는 것이 아니라 결과물을 만드는 과정 자체에 리팩터링이 포함되어 있어야 하는 것이죠. 처음엔 아마 이런 생각까지 하며 코딩을 하는것이 힘들수도 있습니다. 하지만 결과적으로 더욱 빠르게 프로젝트를 완수할 수 있습니다. 결과내기에만 급급해서 무지성으로 코딩을 하다보면 오히려 버그와 씨름하다가 더 늦어지는 상황이 펼쳐질 확률이 높습니다.

 

말은 쉽지만 경험이 많지 않고서야 쉽지 않은 작업일 것 같습니다. 많은 테스트들도 필요할테구요. 어떤 방식이 더욱 가독성이 높고 유지보수에도 편리하며 복잡성도 줄이고 속도도 빠른지... 최적화와도 맞닿아 있는 것 같네요. 저 역시도 이부분은 지속적으로 공부를 해나가야하겠습니다.

 

물론 상황에 따라선 리팩터링을 무시한채 작업을 진행해야하는 경우도 있을 수 있습니다. 정답은 없으니까요. 상황에 맞게 리팩터링을 적절히 활용하는게 더 좋겠죠?

 

마틴 파울러의 저서 《리팩토링》에 다양한 리팩터링 패턴들이 정리되어 있다고 하니 이 책을 참고해도 좋을 듯 합니다. 

 

리팩터링을 좀 더 공부한 뒤 자세한 예제와 함께 찾아뵙도록 하겠습니다~

댓글