| 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.
조건부 로직 간소화
** 복잡한 조건문을 다루는 기술
- 조건문 분해하기 -> if 문 안의 복잡한 로직은 메서드 추출하기 적용
- 조건식 통합하기
- 중첩 조건문을 보호 구문으로 바꾸기 -> return으로 아래 로직이 실행되지 않게 만들기
Before
int result;
if (isVip()) {
result = vipPoint();
} else if (isPlat()) {
result = platPoint();
} else {
result = normalPoint();
}
return result;
=> vip와 plat은 특수 케이스이다.
After
if (isVip()) return vipPoint();
if (isPlat()) return platPoint();
return normalPoint();
=> 보호 구문을 사용하여 Vip일 경우 아래 로직이 실행되지 않도록 한다.
- 조건부 로직을 다형성으로 바꾸기
- 특이 케이스 추가하기
- Assertion 추가하기
API 리팩토링
** 쉽게 이해하고 사용할 수 있는 API를 만드는 기술
- 질의 함수와 변경 함수 분리하기
- 함수 매개변수화하기
- 플래그 인수 제거하기
- 객체 통째로 넘기기
- 매개변수를 질의 함수로 바꾸기
- 질의 함수를 매개변수로 바꾸기
- 세터 제거하기
- 생성자를 팩토리 함수로 바꾸기
- 함수를 명령으로 바꾸기
- 명령을 함수로 바꾸기
상속 다루기
** 상속을 제대로 사용하는 기술
- 메서드 올리기
- 필드 올리기
- 생성자 본문 올리기
- 메서드 내리기
- 핋드 내리기
- 타입 코드를 서브 클래스로 바꾸기
- 서브 클래스 제거하기
- 슈퍼 클래스 추출하기
- 계층 합치기
- 서브 클래스를 위임으로 바꾸기
- 슈퍼 클래스를 위임으로 바꾸기
'클린코드' 카테고리의 다른 글
[Refactoring] 정리 (1) (0) | 2022.09.29 |
---|---|
[Refactoring] 24. 주석 (0) | 2022.09.28 |
[Refactoring] 23. 상속 포기하기 (0) | 2022.09.27 |
[Refactoring] 22. 데이터 클래스 (1) | 2022.09.26 |
[Refactoring] 21. 서로 다른 인터페이스의 대안 클래스들 (1) | 2022.09.25 |