- 조건문은 두가지 형태로 쓰이는데 참인 경로, 거짓인 경로 두곳 모두 정상 동작인 조건문과 한 경로만 정상 동작이고 다른경로는 에러처리를 하는 경우가 있음.
- 보통 전자의 경우 if else로 검사하고, 후자는 if문 하나로 리턴 시킨다.
- 후자를 보호구문 이라고 한다.
- 보호 구문은 if else에 비해 중요도가 떨어지므로 분리하고 함수의 이름으로 나타내어 코드를 더 명백하게 바꿀 수 있다.
예시
직원 급여를 계산하는 코드
function payAmount(employee) {
let result;
if (employee.isSeparated) {
// 퇴사한 직원인가?
result = { amount: 0, reasonCode: "SEP" };
} else {
if (employee.isRetired) {
// 은퇴한 직원인가?
result = { amount: 0, reasonCode: "RET" };
} else {
// 급여 계산 로직
lorem.ipsum(dolor.sitAmet);
consectetur(adipiscing).edit();
sed.do.eusmod = tempor.incididunt.ut(labore) && dolore(magna.aliqua);
ut.enim.ad(minim.veniam);
result = someFinalComputation();
}
}
}
코드에서 의도한 일이 중첩된 조건에 가려저 잘 보이지 않는다.
보호 구문을 사용하여 의도를 명확히 드러내 보면
function payAmount(employee) {
if (employee.isSeparated) return { amount: 0, reasonCode: "SEP" };
if (employee.isRetired) return { amount: 0, reasonCode: "RET" };
// 급여 계산 로직
lorem.ipsum(dolor.sitAmet);
consectetur(adipiscing).edit();
sed.do.eusmod = tempor.incididunt.ut(labore) && dolore(magna.aliqua);
ut.enim.ad(minim.veniam);
return someFinalComputation();
}
조건문 분해하기 (10.1)과 비슷하지만 차이점은 리펙터링을 하는 이유인듯 하다.