코드 리팩토링
'결과의 변경 없이 코드의 구조를 재조정함'을 뜻함
잠재적인 목표는 소프트웨어의 설계, 구조 및 구현을 개선하는 동시에 소프트웨어의 기능을 보존하는 것
= 사용하지 않는 코드 또는 중복된 코드를 지우고, 코드의 로직을 깨끗하고 이해하기 쉽게 디자인하는 것!
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
'AI 웹개발반 > Python, Django' 카테고리의 다른 글
[DRF] APIView와 exception handler (1) (0) | 2024.01.16 |
---|---|
[DRF] 다중(bulk) create, delete 구현 (0) | 2024.01.11 |
[Django] datetime compare 오류, naive와 aware (0) | 2023.07.06 |
[Django] JSONfield (0) | 2023.07.04 |
[Django] raise serializers.ValidationError 사용 시 assertEqual로 에러 메세지 비교하기 (0) | 2023.07.01 |