몽상실현개발주의

[Udemy/CleanCode] 2.08 임시변수 제거하기 본문

Language/Javascript

[Udemy/CleanCode] 2.08 임시변수 제거하기

migrationArc 2022. 9. 8. 11:33

  • 임시 변수
    • 특정 Scope 내부에서 전역변수처럼 활용되는 변수
      • 함수가 커지게 되면, 전역 공간과 다름없는 상황이 발생
      • 임시 객체도 전역 객체처럼 사용 될 수 있음
    • 임시 변수를 어떻게 CRUD 를 할까 고민해야 함

 

 

  • 임시 변수의 개선1
function getElements() {
  const result = {};

  result.title = document.querySelector(".title");
  result.text = document.querySelector(".text");
  result.value = document.querySelector(".value");

  return result;
}

///////////////////////////////////////

function getElements() {
  return {
    title: document.querySelector(".title"),
    text: document.querySelector(".text"),
    value: document.querySelector(".value"),
  };
}
  • 함수의 역할만 보았을때, side Effect 가 많지 않고 부작용이 적음
    • DOM 엘리먼트를 가져와서 반환만 함
    • 변수의 CRUD를 하기 애매해지게 설계됨
  • 임시객체가 생기는 순간, 객체에 접근이 가능하고 CRUD 행위가 가능해짐

 

 

 

  • 임시 변수의 개선2
function getDateTime(targetDate) {
  let month = targetDate.getMonth();
  let day = targetDate.getDate();
  let hour = targetDate.Hours();

  month = month >= 10 ? month : "0" + month;
  day = day >= 10 ? day : "0" + day;
  hour = hour >= 10 ? hour : "0" + hour;

  return { month, day, hour };
}

/////////////////////////////////

function getDateTime(targetDate) {
  let month = targetDate.getMonth();
  let day = targetDate.getDate();
  let hour = targetDate.Hours();

  month = month >= 10 ? month : "0" + month;
  day = day >= 10 ? day : "0" + day;
  hour = hour >= 10 ? hour : "0" + hour;

  return { month, day, hour };
}

function getDateTime() {
  const currentDateTime = getDateTime(new Date());

  return {
    month: currentDateTime.month,
    day: currentDateTime.day,
    hour: currentDateTime.hour,
  };
}
  • 추가적인 스펙이 발생하였을때 문제가 발생
    • 함수의 추가
    • 함수의 수정
  • CURD 를 최소화
  • 하나의 함수는 명확한 하나의 역할만 수행
    • 임시변수를 사용하게 되면, 임수 변수만 조작하게 됨
    • 한줄로 추상화한 함수를 활용 가능

 

 

  • 요약
    • 임시변수를 제거하자
    • 임시 변수의 사용은 명령형으로 가득한 로직이 된다.
    • 어디서 어떻게 잘못되었는지 디버깅이 힘들다.
    • 추가적인 코드를 작성하고 싶은 유혹에 빠지기 쉽다.
      • 코드의 유지보수가 어렵다
    • 임시변수사용의 해결책
      • 합수 나누기
      • 바로 반환
      • 고차함수의 사용
        • map, filter, reduce 등
      • 명령형 -> 선언형 프로그래밍 코드로 변환
Comments