🔥 리팩토링 직접 해보기

<aside> 📌 이 코드는 유데미 부트캠프 최종 테스트였던 “계산기 만들기” 때 작성했던 것입니다.

그 중 “입력된 값의 루트를 계산해서 화면에 보여주는” 함수를 리팩토링 해봤습니다.

화면에 보여줄 숫자 길이의 최대값이 14입니다.

</aside>

Untitled

// 기존 코드
  const getRoot = () => {
    const result = String(Math.sqrt(numberOnDisplay));
    const dotIndex = result.indexOf(".");
    if (dotIndex > 0) {
      const temp = 14 - dotIndex;
      const rootFormatted = Number(result).toLocaleString("ko-KR", {
        maximumFractionDigits: temp,
      });
      setNumberOnDisplay(rootFormatted);
    } else {
      setNumberOnDisplay(result);
    }
  };

⛔️ 기존 코드에서 아쉬운 점

// 메서드 추출을 통해 수정해본 코드

const DISPLAY_MAXIMUM_LENGTH = 14;

const getRoot = (number) => {
  return Math.sqrt(number);
};

const getDotIndex = (number) => {
  return String(number).indexOf(".");
};

const displayRoot = (rootNumber, dotIndex) => {
  if (dotIndex > 0) {
    const limitedLength = DISPLAY_MAXIMUM_LENGTH - dotIndex;
    const rootFormatted = rootNumber.toLocaleString("ko-KR", {
      maximumFractionDigits: limitedLength,
    });
    setNumberOnDisplay(rootFormatted);
  } else if (dotIndex === -1) {
    setNumberOnDisplay(String(rootNumber));
  }
};

const clickRootBtn = () => {
	//numberOnDisplay는 전역변수인데 그냥 이렇게 갖다 쓰는게 맞나? 이것도 ClickRootBtn의 매개변수로 받아야 하나?
  const rootResult = getRoot(numberOnDisplay);
  const rootDotIndex = getDotIndex(rootResult);

  displayRoot(rootResult, rootDotIndex);
};

🫠 리팩토링하면서 느낀점