본문 바로가기
AI 웹개발반/Python, Django

[TIL] 코드 리팩토링 Code Refactoring

by 째깍단 2023. 7. 7.

코드 리팩토링

 

'결과의 변경 없이 코드의 구조를 재조정함'을 뜻함

 

잠재적인 목표는 소프트웨어의 설계, 구조 및 구현을 개선하는 동시에 소프트웨어의 기능을 보존하는 것

= 사용하지 않는 코드 또는 중복된 코드를 지우고, 코드의 로직을 깨끗하고 이해하기 쉽게 디자인하는 것!

 

Martin Fowler와 Kent Beck에 의해 정의 되었다고 한다

 

 

최적화나 디버깅, 테스트하기 좋은 코드로 만드는 것과는 좀 차이가 있다

'리팩토링'을 한다 = 개발자의 실수를 만드는 것을 방지한다

 

 

 


 

 

리팩토링, 어떻게할까?

 

1) 코드 디자인에 작은 구조적 변화를 추가하는 것으로 리팩토링을 시작할 수 있고,

 

2) 리팩토링의 결과물은 항상 같은 동작 / 기능을 수행해야한다

   = 코드를 고치거나 바꿀 수도 있다

   = 쉽게 이해할 수 있고 유지 보수에 좋게 만드는 것에 초점을 맞추어야한다!

   = 로직자체가 변화하는 것은 리팩토링이라고 하기 어렵다

 

3) 리팩토링을 하면서 코드의 동작이 정상적인지 확인하면서 코드를 정리해야한다.

 

 

 


 

 

리팩토링은 언제 하는게 좋을까?

 

  • 삼진 규칙, 3번의 같은 행위가 이루어진다면 리팩토링을 진행하기
    : DB쿼리 요청 등이 너무 많이 들어간다거나, 같은 동작을 반복하는 부분이 있다면 리팩토링을 진행한다

  • 기능을 추가할 때 리팩토링 하기
    : 리팩토링된 코드를 바탕으로 기능을 작성하면 더 깔끔하고 유지보수하기 좋은 코드를 더해줄 수 있고
      또다시 코드를 고칠 일을 줄여준다!

  • 버그를 수정해야 할 때 리팩토링 하기

  • 코드 검토(Code Review)를 할 때 리팩토링 하기

 

 


 

 

리팩토링의 과정

 

  •  문제 찾기
    : 문제가 있는 부분, 무엇이 문제인지 찾기

 

  • 문제 특징 찾기
    : 어떤 것을 바꾸어야하는지, 왜 바꾸어야하는지
    : 바꿈으로써 얻는 이점은 무엇인지?
    : 바꿨을때 위험한 점은 없는지 확인하기

 

  • 솔루션 디자인
    : 코드의 최종 목적은 무엇인지
    : 어떤 코드를 바꾸는 것이 적당한지 설계

 

  • 코드 수정
    : 코드 기능은 이전에 기능하던 것과 동일하게 되도록 하기

 

 

 

 

리팩토링 방법

 

  • Rename 이름 재설정 
    : 메서드나 변수, 클래스 등의 이름을 덜 혼동할 수 있도록 수정
  • Move Class 클래스 이동
    : 더 잘맞는 패키지로 이동하기
  • Extract Method  메서드 추출  
    : 긴 메서드를 쪼개서 가독성, 유지성을 높인다
    : 한 가지 일을 수행하는 코드의 부분을 서술적 이름의 새로운메서드로 만들기
    : 메서드를 추출해 특정 기능을 재사용 
  • Extract Superclass  슈퍼 클래스 추출
    : 구체화시키는 클래스 중 공통된 메서드는 정의를 위로 올리기
    : 서브 클래스에서 다양한 것을 추상 메서드로 남기기
    -> 효율적인 코드 재사용을 도움!
  • Replace Conditional with Polymorphism 다형성을 조건으로하는 것을 대체
    : if와 같은 의사결정 메서드 만들기 등등...

 

 

 

 

 

[아래 블로그와 위키를 참고하여 공부하며 정리함] :
https://ko.wikipedia.org/wiki/%EB%A6%AC%ED%8C%A9%ED%84%B0%EB%A7%81

https://tasddc.tistory.com/85

https://velog.io/@rlrhs11/Code-Refactoring%EC%BD%94%EB%93%9C-%EB%A6%AC%ED%8E%99%ED%86%A0%EB%A7%81-%EC%9D%B4%EB%9E%80