[리팩터링 2판] 10. 조건부 로직 간소화

Ash·2021년 12월 4일
0

10.1 조건문 분해하기

조건식과 조건에 딸린 조건절을 각각 함수로 추출하기

10.2 조건식 통합하기

  1. 조건식들의 부수효과가 없는지 확인하기
  2. 조건문 두개를 선택하여 조건식들을 논리 연산자로 결합한다.
  3. 테스트
  4. 조건이 하나가 남을 때까지 2~3 과정을 반복한다.
  5. 합쳐진 조건식을 함수로 추출할지 고려해본다.

10.3 중첩 조건문을 보호 구문으로 바꾸기

보호구문: 조건문에서 조건이 참인 경우 예외처리나 return 문을 통해 조건절에서 빠져나오는 것

  1. 교체해야 할 조건 중 가장 바깥 것을 선택하여 보호 구문으로 바꾼다.
  2. 테스트
  3. 1~2 과정을 반복한다.
  4. 같은 결과를 반환하는 보호 구문이라면 조건식을 통합한다.

10.4 조건부 로직을 다형성으로 바꾸기

타입을 여러 개 만들고 각 타입이 조건부 로직을 자신만의 방식으로 처리하도록 구성하는 방법이 있다.
1. switch문의 case별로 클래스를 만들기. => 공통 switch 로직의 중복을 없앨 수 있다.
2. 기본 동작을 슈퍼클래스도, 변형 동작에 해당되는 case를 각각의 서브클래스로 만들기.

10.5 특이 케이스 추가하기

특이 케이스 패턴: 특수한 경우의 공통 동작을 하나로 모아 사용하는 방식

클래스 사용 예제
객체 리터럴 사용 예제

10.6 어서션 추가하기

어서션: 항상 참이라고 가정하는 조건부 문장
특정 조건이 참일 때만 제대로 동작하는 코드 영역이 있는 경우 어서션을 추가하자.

10.7 제어 프래그를 탈출문으로 바꾸기

제어 플래그 코드의 동작을 변경하는데 사용되는 변수
어딘가에서 값을 계산해 제어 플래그엥 설정ㅇ한 후 달른 어딘각의 조건문에서 검사하는 형태로 쓰이는 경우 ---> 저자는 악취로 본다.

// 변경 전
for (const p of people) {
	if (!found) {
    	if (p === "조커") {
        	sendAlert();
            found = true;
        }
    }
}

// 변경 후
for (const p of people) {
	if (p === "조커") {
        sendAlert();
        break;
    }
}

예제 소스코드
https://github.com/yeoj1n/JS-study/blob/master/refactoring-study/chapter10/%EC%A1%B0%EA%B1%B4%EB%B6%80%EB%A1%9C%EC%A7%81%EA%B0%84%EC%86%8C%ED%99%94.js

profile
기록남기기👩‍💻

0개의 댓글