본문 바로가기
Back-End/Spring

[리팩토링] 코드 리팩토링이란 ?

by LeeGangEun 2023. 7. 22.

서론

과거에는 기능구현이 더욱 중요했지만, 현재는 코드 가독성의 중요성이 점점 더 부각되고 있다.
과거 프로젝트를 리팩토링하며 리팩토링에 대한 개념을 정리하고자 한다.


리팩토링이란 ? ?

리팩토링이란 코드의 구조와 디자인을 개선하는 작업이다.
기능에는 영향을 주지 않으면서 가독성을 높이고 유지보수를 용이하게 만드는 것이다.

즉, 코드의 품질을 향상시키고 버그를 줄이며, 향후 개발과 유지보수를 보다 효율적으로 할 수 있다.


리팩토링 과정

1. 코드의 이해 
   -> 코드의 기능, 구조, 의존성 등을 판단하여 어느 부분을 개선해야 할지 판단해야 한다.

2. 테스트 작성
  -> 리팩토링 전,후 에 테스트 결과가 변함이 없어야 한다.

3. 작은 단위로 분리
  -> 큰 변경사항을 한번에 적용하지 않고, 쪼개서 적용하며 테스트 한다.

3. 코드 개선
  -> 가독성을 높이고 중복 코드를 메서드화 시키며, 코드의 구조를 개선한다.
       객체지향을 기반으로 유지보수가 쉽게 설계해야 한다


리팩토링 방법

1. 메서드 추출(Extract Method) 
  -> 긴 메서드를 작은 단위로 분리하여 코드의 가독성을 높이고 중복을 줄일 수 있다.

2. 변수 추출(Extract Variable)
  -> 복잡한 표현식을 변수로 추출하여 코드를 이해하기 쉽게 만들 수 있다.

3. 클래스 추출(Extract Class)
  -> 하나의 클래스가 너무 많은 책임을 지고 있다면, 관련된 기능들을 새로운 클래스로 추출한다.

4. 메서드 옮기기(Move Method)
  -> 메서드가 자신이 속한 클래스보다 다른 클래스에 더 적합하다면 옮긴다.

5. 필드 옮기기(Move Field)
  -> 필드가 자신이 속한 클래스보다 다른 클래스에 더 적합하다면 옮긴다.

6. 조건문을 다형성으로 바꾸기(Replace Conditional with Polymorphism)
  -> 복잡한 조건문을 다형성을 활용하여 깔끔한 코드로 변환할 수 있다.(각각 클래스를 생성하여 상속받는 형태)

7. 중복 코드 제거(Remove Duplication)
  -> 중복 코드를 찾아서 공통된 부분을 추출하여 메서드로 만들거나 상속 등을 활용하여 중복을 제거할 수 있다.

8. 불필요한 코드 제거(Remove Unused Code)
  -> 사용되지 않는 코드를 제거하여 코드의 가독성을 높이고 유지보수를 용이하게 할 수 있다.

9. 인터페이스 추출(Extract Interface)
  -> 클래스의 일부 기능을 별도의 인터페이스로 추출하여 코드의 유연성과 재사용성을 높인다.

10. 클래스 이름 변경(Rename Class)
  -> 더욱 명확하고 의미 있는 이름으로 변경할 수 있다.

이 외에도 다양한 기법들이 있으며, 가장 중요한 점은 리팩토링을 수행할 때는 항상 코드를 변경하기 전에
테스트 코드를 작성하고 기능을 검증해야 한다.

그럼 다음엔 실제 1년전 진행했던 프로젝트를 리팩토링 해보겠다.