Skip to content

Latest commit

 

History

History
51 lines (43 loc) · 1.81 KB

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

File metadata and controls

51 lines (43 loc) · 1.81 KB

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

  • 조건문은 두가지 형태로 쓰이는데 참인 경로, 거짓인 경로 두곳 모두 정상 동작인 조건문과 한 경로만 정상 동작이고 다른경로는 에러처리를 하는 경우가 있음.
  • 보통 전자의 경우 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)과 비슷하지만 차이점은 리펙터링을 하는 이유인듯 하다.