728x90
지난 게시물에서 리팩터링 했던 코드 중 일부 코드를 다시 리팩터링했다.
그 일부 코드만 다시 기록하려고 한다.
1. 각 공연별 총액, 좌석 표시하는 함수
getOnePlayInfo
원하는 출력 결과
Hamlet: $650.00 (55석)
As you like it: $580.00 (35석)
Othello: $500.00 (40석)
- 기존 코드(map을 사용하여 문자열 더하기)
// 출력결과에서 원하는 play 하나의 정보를 print 하는 함수
const getOnePlayInfo = (performanceInfos) => {
let result = "";
performanceInfos.map((performance) =>
result += `\n${performance.play.name}: ${format(performance.amount / 100)} (${performance.audience}석)`
)
return result;
}
- reduce 사용 코드
- reduce를 사용하여 기존값들을 누적해서 더해준다. 초기값을 []로 둔다.
- join으로 배열을 합쳐주는데 기준은 개행문자로한다. (기존처럼 더할 때 개행문자를 빼도 된다.)
- 불 필요한 변수 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;
}
- 리팩터링 코드
- comedy라는 타입으로 함수에서 분기치는 것이 아닌, 분기쳐야할 조건을 parameter로 넘기는 방법
- 포인트 구하는 함수는 주어진 인자에 따라서 포인트를 계산하는 함수의 역할만 수행하게 처리
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;
}
함수를 진짜 함수처럼 쓸 수 있도록 리팩터링 하는 것이 중요하다는 것을 배웠다. 함수는 말 그대로 받아온 인자들을 통해 함수의 역할만 충실하게 하는 함수형 프로그래밍 개념을 잘 인지하고 코딩해야겠다아! 어려워어..
728x90
'개발공부' 카테고리의 다른 글
[리팩터링] Refactoring 2판 - 6장 (1) | 2023.02.24 |
---|---|
[리팩터링] Refactoring 2판 - 1장 (2) | 2023.02.16 |
[리팩터링] Refactoring 2판 - 2,3장 (1) | 2023.02.10 |