if 제거 (클린코딩)

dev.dave·2023년 7월 24일

Javascript

목록 보기
19/167

// 프로그래밍을 하다보면, 분기처리해야할 코드들이 많이 있는데,
// 그럴떄는 당연히 switch 문과 , if문을 많이 사용하는데요.
// 간단한 코드에서는 꽤 괜찮은데,
// 조건상황이 많아지는경우는 , 코드의 중복이 많아지는것 같고,
// 좀 번잡해보입니다.
// 이걸 해결하는 방법은, 매핑관계를 미리 만들어두는 것인데요.
//
//
//일반적인 분기 처리 코드
function executePayment(paymentType) {
if (paymentType === "KAKAO_PAYMENT") {
return "카카오 결제 처리";
} else if (paymentType === "NAVER_PAYMENT") {
return "네이버 결제 처리";
} else if (paymentType === "COUPANG_PAYMENT") {
return "쿠팡 결제 처리";
} else if (paymentType === "PAYCO_PAYMENT") {
return "페이코 결제 처리";
} else if (paymentType === "APPLE_PAYMENT") {
return "애플 결제 처리";
}
}
executePayment("KAKAO_PAYMENT"); //카카오 결제 처리
executePayment("NAVER_PAYMENT"); //
executePayment("COUPANG_PAYMENT"); //
executePayment("PAYCO_PAYMENT"); //
executePayment("APPLE_PAYMENT"); //

  /////////////////////////////////////////////////////////

  //위 코드 보면 키(KAKAO_PAYMENT) - 벨류(카카오 결제 처리) 쌍으로 이루어져있는데,
  //코드를 애초에,

  //고정된 값
  const paymentMap = {
    KAKAO_PAYMENT: "카카오 결제 처리",
    NAVER_PAYMENT: "네이버 결제 처리",
    COUPANG_PAYMENT: "쿠팡 결제 처리",
    PAYCO_PAYMENT: "페이코 결제 처리",
    APPLE_PAYMENT: "애플 결제 처리",
  };

  //이렇게 키 와 벨류로 된 테이블을 미리 만들어 놓고,

  //비즈니스 로직
  function executePayment(paymentType) {
    return paymentMap[paymentType];
  }

  //호출 결과
  console.log(executePayment("KAKAO_PAYMENT")); //카카오 결제 처리
  console.log(executePayment("NAVER_PAYMENT")); //네이버 결제 처리
  console.log(executePayment("COUPANG_PAYMENT")); //쿠팡 결제 처리
  console.log(executePayment("PAYCO_PAYMENT")); //페이코 결제 처리
  console.log(executePayment("APPLE_PAYMENT")); //애플 결제 처리
  // 여기서 실행하면 볼 수 있게 짜는게 더 보기좋다.

  //이 코드는 고정된 값에 수정사항이 발생하더라도, 비즈니스 로직에 손댈 필요가 없다는 장점이 있다.

  ///////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////

  // 다른 케이스를 보자.

  // 이번엔 좀더 복잡한 함수가 있는거에요. 그러면, 함수 루틴들을 서브로 호출해줘야되는데,

  //더미 데이터
  function payOnKakao() {
    console.log("kakao pay 처리중");
  }
  function payOnNaver() {
    console.log("naver pay 처리중");
  }
  function payOnCoupang() {
    console.log("coupang pay 처리중");
  }
  function payOnPayco() {
    console.log("payco pay 처리중");
  }
  function payOnApple() {
    console.log("apple pay 처리중");
  }

  //비즈니스 로직
  function executePayment(paymentType) {
    if (paymentType === "KAKAO_PAYMENT") {
      payOnKakao();
    } else if (paymentType === "NAVER_PAYMENT") {
      sendLog();
      payOnNaver();
    } else if (paymentType === "COUPANG_PAYMENT") {
      sendLog();
      payOnCoupang();
    } else if (paymentType === "PAYCO_PAYMENT") {
      sendLog();
      payOnPayco();
    } else if (paymentType === "APPLE_PAYMENT") {
      sendLog();
      payOnApple();
    }
  }

  //로직함수 실행
  executePayment("KAKAO_PAYMENT"); // kakao pay 처리중

  //요런 코드인데,
  // 맵핑관계를 미리 만들어서 코드를 다시 짜보면,

  /////////////////////////////////////////

  //더미 데이터
  function payOnKakao() {
    console.log("kakao pay 처리중");
  }
  function payOnNaver() {
    console.log("naver pay 처리중");
  }
  function payOnCoupang() {
    console.log("coupang pay 처리중");
  }
  function payOnPayco() {
    console.log("payco pay 처리중");
  }
  function payOnApple() {
    console.log("apple pay 처리중");
  }

  //서브 루틴 로직 & 더미 데이터 실행
  const paymentMap1 = {
    KAKAO_PAYMENT() {
      //객체의 키값을 함수로 하고. (객체안에서는 함수function 키워드 생략가능)
      payOnKakao();
    },
    NAVER_PAYMENT() {
      sendLog();
      payOnNaver();
    },
    COUPANG_PAYMENT() {
      sendLog();
      payOnCoupang();
    },
    PAYCO_PAYMENT() {
      sendLog();
      payOnPayco();
    },
    APPLE_PAYMENT() {
      sendLog();
      payOnApple();
    },
  };

  //핵심 비즈니스 로직
  function executePayment(paymentType) {
    paymentMap1[paymentType](); // 함수니까 호출.
  }

  //비즈니스 로직실행
  executePayment("KAKAO_PAYMENT"); // kakao pay 처리중
  executePayment("NAVER_PAYMENT"); // naver pay 처리중
  executePayment("COUPANG_PAYMENT"); // coupang pay 처리중
  executePayment("PAYCO_PAYMENT"); // payco pay 처리중
  executePayment("APPLE_PAYMENT"); // apple pay 처리중

  //아, 깜박하고 sendLog(); 함수는 안만듬;

  //아무튼,
  //즉, 결론적으로는,
  // 클린코드를 하는 방법인데,
  // if문 switch문 사용안 하고,
  // 객체 리터럴을 활용한 방법이다.
  // 훨씬 깔끔하고, 분리되있고, 비즈니스 로직은 수정할 필요도없고 좋다.
profile
🔥개인 메모 / 다른블로그 자료 참조 / 다른블로그 자료 퍼옴 (출처표기) /여기저기서 공부 했던 내용 개인메모 & 참고 / 개인 기록 용도 블로그 입니다.🔥

0개의 댓글