✏️1.8 다형성을 활용해 계산 코드 재구성하기
목표
조건부 로직을 다형성으로 바꾸기
export default function createStatementData(invoice, plays) {
const result = {};
result.customer = invoice.customer;
result.performances = invoice.performances.map(enrichPerformance);
result.totalAmount = totalAmount(result);
result.totalVolumeCredits = totalVolumeCredits(result);
return result;
function enrichPerformance(aPerformance) {
const result = Object.assign({}, aPerformance);
result.play = playFor(result);
result.amount = amountFor(result);
result.volumeCredits = volumeCreidtsFor(result);
return result;
}
function playFor(aPerformance) {
return plays[aPerformance.playID]
}
function amountFor(aPerformance) {
let result = 0;
switch (aPerformance.play.type) {
case "tragedy":
result = 40000;
if (perf.audience > 30) {
result += 1000 * (aPerformance.audience - 30);
}
break;
case "comedy":
result = 30000;
if (perf.audience > 20) {
result += 1000 + 500 * (aPerformance.audience - 20);
}
result += 300 * aPerformance.audience
break;
default:
throw new Error(`알 수 없는 장르: ${aPerformance.play.type}`);
}
return result;
}
function volumeCreditsFor(aPerformance) {
let result = 0;
volumeCredits += Math.max(aPerformance.audience - 30, 0);
if ("comedy" === playFor(aPerformance).type)
volumeCredits += Math.Floor(aPerformance.audience / 5 );
return result;
}
function totalAmount(data) {
return data.performances
.reduce((total, p) => total + p.amount, 0);
}
function totalVolumeCredits(data) {
return data.performances
.reduce((total, p) => total + p.volumeCredits, 0); 공연료 계산기 만들기
함수들을 계산기로 옮기기
공연료 계산기를 다형성 버전으로 만들기
📍 조건부 로직을 다형성으로 바꾸기를 적용하자.
🎬 비극 공연의 공연료 계산
🎬 희극 공연의 공연료 계산
Last updated