리팩토링(Refactoring)

Juhwan Lee·2022년 6월 15일
4

코드를 짜기 전에는 '유지보수성이 높은 코드를 짜야지!'라고 생각을 하지만, 기능구현에 허덕여 망각하는 경우가 너무 많다.

기능 구현이 우선시 되어야하긴 하지만 내 커리어를 발전시킴에 있어, 개발자라면 좋은 코드를 작성하기 위해 항상 고민을 할 것이다.

약 2개월 전 구매를 했었는데, 프로젝트를 진행하느라 바빠서 사놓고 읽어보지는 못했다.

기술 면접 대비도 중요하지만 본질적인 문제를 해결하기 위해 짬짬이 공부해 나가려한다.

리팩토링이란?

사전적 의미로 리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다.
주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다.

리팩토링에서 헷갈릴만한 점이 유지보수성을 개선하는 것이지, 1) 기능을 변경,추가하거나 2) 버그를 수정하거나 3) 성능을 개선하거나 4) 의존성을 업데이트하는 것이 아니다.

왜 코드를 개선해야할까?

  1. 개발 초기 단계부터 완벽한 코드/시스템 설계가 어렵다
  2. 프로그램의 요구사항은 꾸준히 변경된다
  3. 더럽고 복잡한 코드는 이해하기도 어렵고 예상하지 못한 에러가 발생하기 쉽다
    👉 복잡한 코드는 유지보수가 어렵다

모든 코드는 언제나 고유한 일을 수행하는 것을 보장해야 이해해야할 코드의 양이 작고, 실수 없이 수정을 할 수 있다.

처음부터 클린코드를 작성하면 좋겠지만, 불가능에 가깝다는 것을 프로젝트를 하며 느꼈다.

단적인 예로 tailwindCSS를 적용해서 프로젝트를 진행했었는데, 초기에는 '이정도면 쓰기 편하겠지?' 싶었지만 진행을 할수록 불편한 점이 많았다.
좋은 reference를 많이 보지 못하고 진행했으며, 처음부터 기술에 대한 이해를 100%한다는건 사실상 불가능했다.

어떻게 리팩토링을 해야할까?

그래서 어떻게 리팩토링을 진행해야할까?
리팩토링이란 기능은 보존하면서 설계, 구조를 개선하는 것이다.

기존 프로그램의 기능과 동작을 유지하기 위해 테스트 코드가 필요하다

테스트 코드가 없다면, 기존 프로그램의 기능과 동작을 유지하는지 알 수 없고 일일이 어플리케이션을 실행하면서 확인을 해봐야한다

아직 테스트 코드 작성은 해본적이 전무하다. 추후 공부해야할 사항이다.

❗이때 중요한 점이 리팩토링을 진행할 때 소스코드에 버그가 있더라도 그대로 진행을 해야한다
👉 리팩토링 진행 후 버그 수정

언제 리팩토링해야 할까?

필자는 거의 한 시간 간격으로 리팩토링을 진행한다고 한다. 3의 법칙이란 것을 또 제시해 준다.

3의 법칙

  1. 처음에는 그냥 한다.
  2. 비슷한 일을 두 번째로 하게 되면(중복이 생겼다는 사실에 당황스럽겠지만), 일단 계속 진행한다.
  3. 비슷한 일을 세 번째 하게 되면 리팩토링한다.

리팩토링을 진행 방식을 크게 세 가지로 분류할 수 있다.

1. 프로젝트를 시작할 때
좋은 디자인 패턴으로 클린코드를 작성하기 위해 노력을 한다.

  • 기능 구현을 위한 코드를 작성 👉 테스트 코드 작성
  • 코드를 이해하기 쉽고 기능 추가가 용이하게 만든다
  • 수시로 리팩토링 과정을 거쳐야한다

2. 프로젝트를 유지보수할 때

  • 버그를 발견
    버그를 잡을 수 있는 테스트 코드를 작성하며 리팩토링을 함께 진행한다.
  • 기능을 추가, 의존성 업데이트
    기존의 기능들에 대한 테스트코드를 작성하고 리팩토링을 진행하고 기능을 추가하거나 의존성을 업데이트 한다.

3. 레거시를 들어낼 때
버그 수정 및 기능을 추가할때 필요한 부분만 한정적으로 테스트 코드를 작성하고 리팩토링을 진행 후 수정,추가를 진행한다.

비즈니스 우선 순위에 따라, 아예 다시 짜는게 나을 때도 있다

완벽한 코드, 완벽한 설계는 존재하지 않는다

완벽한 코드를 작성할 수는 없고, 이게 과거의 나에겐 최선이었다고 생각한다.

앞으로 좋은 습관을 가져서 좋은 코드를 작성하려 노력해야겠다.

프론트엔드 테스트 코드 작성에 대하여 따로 공부도 진행을 해야겠다.

profile
keep going

0개의 댓글