저번 포스팅에서 리팩토링했던 코드 중 일부를 다시 리팩토링 했습니다.
그만큼 일부 코드다시 글을 쓰려고 합니다.
1. 공연별 총금액 및 좌석수 표시 기능
getOnePlayInfo
원하는 출력 결과
Hamlet: $650.00 (55석)
As you like it: $580.00 (35석)
Othello: $500.00 (40석)
– 기존 코드(지도로 문자열 추가)
// 출력결과에서 원하는 play 하나의 정보를 print 하는 함수
const getOnePlayInfo = (performanceInfos) => {
let result = "";
performanceInfos.map((performance) =>
result += `\n${performance.play.name}: ${format(performance.amount / 100)} (${performance.audience}석)`
)
return result;
}
– 사용 코드 줄이기
- 축소를 사용하여 기존 값을 누적하고 추가합니다. 초기값을 ()로 설정합니다.
- 배열은 조인으로 결합되지만 기본값은 개행 문자입니다. (기존처럼 추가할 때 줄 바꿈 문자를 생략할 수 있습니다.)
- 불필요한 변수 결과를 제외합니다.
const getOnePlayInfo = (performanceInfos) => {
return performanceInfos.reduce((acc, performance) =>
(...acc, `${performance.play.name}: ${format(performance.amount / 100)} (${performance.audience}석)`)
, ()).join("\n")
}
2. 서비스 종류별 포인트 적립 기능
– 기존 코드
const getPerformanceVolumeCredit = (performance) => {
// 포인트 구하기
let volumeCredits;
volumeCredits = Math.max(performance.audience - 30, 0);
if(performance.play.type === "comedy") {
volumeCredits += Math.floor(performance.audience / 5);
}
return volumeCredits;
}
– 리팩토링된 코드
- 코메디 형식으로 함수에서 분기가 아닌 조건을 분기에 매개변수로 전달하는 방식
- 포인트 획득 기능은 주어진 계수에 따라 포인트를 계산하는 기능만을 수행하도록 처리됩니다.
let isAdditional = newPerformance.play.type === "comedy";
newPerformance.point = getPerformanceVolumeCredit(newPerformance, isAdditional);
const getPerformanceVolumeCredit = (performance, isAdditional) => {
// 포인트 구하기
let volumeCredits;
volumeCredits = Math.max(performance.audience - 30, 0);
if(isAdditional) {
volumeCredits += Math.floor(performance.audience / 5);
}
return volumeCredits;
}
함수를 실제 함수처럼 사용할 수 있도록 리팩토링 함수의 중요성을 배웠습니다. 함수는 문자 그대로 받는 인수를 통해서만 함수의 역할을 수행하는 함수형 프로그래밍 개념에 맞게 잘 인식되고 코딩되어야 합니다! 힘들다…

