리팩터링이란?

리팩토링은 겉으로 보이는 동작을 바꾸지 않고, 이해하거나 수정하기 쉽게 소프트웨어의 구조를 변경하는 행위이다.
리팩터링을 할땐 반복을 없애거나, 복잡한 로직을 단순화하고, 큰 함수를 나누고, 변수명을 수정하는 등 다양한 행위를 포함한다.
안전한 리팩터링을 위해서는 테스트가 필수이다. 만약 내 코드가 겉으로 보이는 동작이 달라졌다면 이는 테스트를 통해 확인할 수 있다.
따라서 테스트를 하지 않는다면 리팩터링을 하는데에 매우 소극적으로 변하게 되고 큰 구조의 변경이나 로직을 단순화하는 등 실제 결과를 다르게 할 수도 있는 거대한 리팩터링을 하는데에 무리가 있다.

리팩터링은 다음과 같은 이유들로 진행한다고 저자는 설명한다.

  • 새로운 코드를 더 쉽게 추가할 수 있도록 하기 위해
    코드를 새로 추가할 땐 두가지 방법중 하나를 택하게 된다. 기존 코드를 생각하지 않고, 무작정 프로그램을 작성하는 방법과, 새로운 기능이 예쁘게 들어맞도록 기존의 설계를 약간 수정하는 것이다. 전자의 방법은 '설계 부채'를 만들고, 이는 나중에 언젠간 리팩터링으로 갚아야 한다.
  • 기존 코드를 잘 이해하고 발전적인 설계로 개선하기 위해
    가끔 스스로 짠 코드도 이해하기 힘든 경우가 있다. 이런 코드에 무작정 주석을 다는 것보단, 코드가 명확하지 않은 부분이 있다면 리팩터링으로 해결하는 것이 옳을 것이다. '냄새'를 덮는게 아니라, 냄새의 근원을 찾아 없애는 것이다. 이 과정을 통해 코드의 유지보수와 확장이 매우 쉬워지게 된다.
  • 덜 짜증나는 코드를 만들기 위해
    일단 리팩터링을 하지 않은 코드들을 보면 짜증이 나기때문에 이를 덜 짜증나게 바꾸는 것으로 프로그래밍을 좀 더 즐겁게 만들수 있다.


사람이 읽기 쉬운 코드

다음과 같은 말이 있다.

컴퓨터가 이해하는 코드는 어느 바보나 다 짤 수 있다. 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 짠다.


사람이 이해하는 코드를 짜는것이 코드 리뷰를 진행하거나, 서로의 코드를 이해할 때 압도적으로 도움이 된다. 그런 점에서 코드를 깔끔하게 유지하는 것이 매우 중요하다. 이는 마치 방 청소와 같은데, 일이 쌓이게 되면 하기가 싫어진다. 그때 그때 작은 일을 해결해야 한다. 한번 귀찮다고 안하기 시작하면 난장판이 되는것은 금방이다.

작은 단계

항상 리팩터링을 할때 작은 단계로 점차 나아가는 것이 중요하다. 지나치게 큰 단계를 취하고 테스트를 통과시키기 위해 많은 고생을 하는 경우가 많다. 테스트는 나침반이다. 올바른 길에서 벗어나지 않도록 도와준다. 조금씩 조금씩 한걸음 한걸음 떼는 습관을 들이자.

설계 부채

인간은 완벽하지 않다. 언제나 완벽한 설계를 한다는 것은 사실상 불가능하고, 우리는 그렇기 때문에 '설계 부채'라는 것을 지게 된다. 제대로 되지 못한 설계를 리팩터링을 통해 갚지 않는다면, 이는 눈덩이처럼 불어나게 되고, 손쓸수 없는 지경에 까지 이르게 된다.

'패턴 공부' 카테고리의 다른 글

Move Creation Knowledge to Factory  (0) 2021.04.07
Replace Constructors with Creation Methods  (0) 2021.04.07
소프트웨어 패턴과 TDD  (0) 2021.04.06
서론  (0) 2021.04.06

+ Recent posts