// 프로그래밍을 하다보면, 분기처리해야할 코드들이 많이 있는데,
// 그럴떄는 당연히 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문 사용안 하고,
// 객체 리터럴을 활용한 방법이다.
// 훨씬 깔끔하고, 분리되있고, 비즈니스 로직은 수정할 필요도없고 좋다.