리펙토링이란
- 프로그램 내부 구조를 개선하는것으로 외부에서 보는 프로그램 동작은 변하지 않는다
- 유지 보수성을 향상시키고, 품질을 높이는 활동
- 소규모 변경 후 동작여부를 테스트하고 다음 리펙토링의 단계로 진행. 만약 작동하지 않을경우 리펙토링 undo
리펙토링의 장점
- 복잡한 코드가 단순화 가독성이 높아진다
- 디버깅이 용이해진다
- 요구사항 변경에 빠르게 대응할 수 있다.
리펙토링 수행절차
1. 조직구성
2. 수행 통제 : 변경관리, 형상관리
3. 수행기법 : 디자인 패턴
4. 테스트 : 단위/통합 테스트, 회귀테스트
5. 결과 정리 : 문서화, 현행화
리펙토링 기법
1. 메소드 정리
- extract method : 그룹으로 묶을 수 있는 코드조직을 별도의 매소드로 뽑아냄
- replace parameter with meathod : A매소드의 파라미터가 B매소드의 결과값이면 A매소드 내부에서 B매소드를 호출
2. 객체간 기능 이동
- extract class : 두개의 클래스가 해야할 일을 하나의 클래스가 하고 있는 경우 새로운 클래스를 만들어 기존 클래스의 기능을 추출
- extract subclass : 어떤 클래스가 일부 인스턴스에 의해서만 사용되는 기능을 가지고 있으면 해당 기능을 담당하는 서브클래스 만듦
- extract interface : 여러 클라이언트가 한 클래스의 인터페이스의 동일한 부분집합을 사용하고 있으면 부분집합을 인터페이스로 뽑아내는것
3. 이름
- rename meathod : 매소드의 이름을 목적이 명확하게 들어나도록 수정
4. 추측성 일반화
- inline meathod : 매소드 코드가 단순, 명확하다면 매소드를 사용하지 않고 그냥 쓰는 것
- collapse hierarchy : 슈퍼클래스와 서브클래스가 별로 다르지 않다면 하나로 통합
5. 중복
- replace magic number with symbolic constant : 특별한 의미를 갖고 있는 숫자는 상수를 만들어 의미가 잘 드러나도록 이름짓고 대체
- pull up field : 두 서브 클래스가 동일한 필드를 가지고 있으면, 그 필드를 수퍼 클래스로 옮긴다
- pull up method : 동일한 일을 하는 매소드가 여러 서브클래스에서 가지고 있으면 해동 메소드를 수퍼클래스로 옮긴다
* 출처 : https://refactoring.guru/ (리팩토링 관련 정보 다수존재)