개발공부

[리팩터링] Refactoring 2판 - 1장 2차

햄❤️ 2023. 2. 20. 14:07
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