미라클 메모리

목차

임시변수란 무엇인가?

임시변수란 어느 특정 공간, 스코프 안에서 전역 변수처럼 활용하는 변수를 의미한다. 전역 변수를 제거하기 위해서 임의의 함수를 만들어 지역스코프 안에서 변수를 관리한다 이때 함수안에서 사용하는 변수가 엄청나게 많아진다면 어떤 문제가 있을까?

function getObject() {
  const result = {};
/*
  코드 100줄
*/
  return result;
}

변수와 관련된 코드가 100줄이 넘어간다고 가정해보자. 그 코드는 전역변수와 같은 역할을 하는 코드와 다름이 없어진다. 임시 변수를 제거하기 위한 여러가지 방법이 있는데 바로 반환하는 방법을 한번 적용해봤다

임시변수 제거하기 - 바로 반환

const getTime = () => {
  let years = new Date().getFullYear();
  let days = new Date().getDay();
  let date = new Date().getDate();
  let months = new Date().getMonth();
  let hours = new Date().getHours();
  let minutes = new Date().getMinutes();
  let miliSeconds = new Date().getMilliseconds();

years = new Date(nextMonthData).getFullYear()
  return {
    years,
    days,
    date,
    months,
    hours,
    minutes,
    miliSeconds,
  };
};

전역공간을 사용하지 않기 위해서 getTime이라는 함수를 만들었다. 시간과 관련된 정보를 얻기위한 Date값이 들어있는 것을 알고 있다. return으로는 각각 식별자명들을 객체에 담아서 보낸다.

이때 주의해야 할 점

let으로 선언된 변수들은 언제든지 재할당이 가능하다. 즉, 코드를 언제든지 변경할 수 있는 가능성을 내포하고 있다

years = new Date(nextMonthData).getFullYear() // 본래 목적과 다르게 코드가 오염이되어버린다

이런 재 할당을 방지하기 위해서 바로 반환하는 방법을 사용하도록하자.

해결방법 적용

export const getTime = () => {
  return {
    years: new Date().getFullYear(),
    days: new Date().getDay(),
    date: new Date().getDate(),
    months: new Date().getMonth(),
    hours: new Date().getHours(),
    minutes: new Date().getMinutes(),
    miliSeconds: new Date().getMilliseconds(),
  };
};

응용하기

그렇다면 getTime안에있는 변수들을 사용해서 현재 시간에 대한 날짜를 얻을 수 있는 변수를 만들어보자.

export const getCurTime = () => {
  const WEEKDAY = [
    "일요일",
    "월요일",
    "화요일",
    "수요일",
    "목요일",
    "금요일",
    "토요일",
  ];
  return {
    curYear: getTime().years,
    curDays: WEEKDAY[getTime().days],
    curDate: getTime().date,
    curMonths: getTime().months + 1,
    curHour: String(getTime().hours).padStart(2, "0"),
    curMinutes: String(getTime().minutes).padStart(2, "0"),
  };
};

getCurTime 함수 역시 값을 변수에 할당하지 않고 바로 return문에 담아서 보냄으로써 누군가 참조하여 코드가 감염될 수 있는 가능성을 제거하고있다.