미라클 메모리

목차

Why Use Closure

const outer = ()=>{
  let foo = 0
  const clouser =()=>{
    return foo = 3
  }
return {inner, foo}
}

outer().clouser() // 3
outer().foo // 0

Closure를 사용하는 이유는 외부함수로 전달받은 매개변수 혹은 외부함수 내부에서 선언된 지역변수의 값을 변경하지 않으면서, 즉 부수효과를 일으키지 않으면서 코드를 출력하기 위해서 사용한다. 이런식으로 클로저를 사용하면 안전하게 전달받은 데이터를 사용하여 여러가지 함수 로직을 작성할 수 있다. 프로젝트를 진행하다가 날짜 정보를 가공하는 과정에서 추상화를 하고싶은 일이 생겨서 적용을 했다.

바로 Utill 함수 추상화이다. Utill 함수를 추상화 하기 위해서 getStringDate라는 함수를 만들었고 그 함수는 2개의 함수를 리턴한다. 전달받은 date의 값을 추상화 하기 위해서 closure를 사용하기로했다.

export const getStringDate = (date) => {

  // 2022-03-28
  const ISOString = () => {
    return new Date(date).toISOString().slice(0, 10);
  };
  
  // 2022. 03. 28
  const dataString = () => {
    return new Date(parseInt(date)).toLocaleDateString().slice(0, -1);
  };
  return { ISOString, dataString };
};

정리

Closure를 사용한 이유는 평소에 배웠던 개념을 활용해 보고싶었기 때문이다. 아직은 느낌적으로 반드시 Closure가 좋다! 라고 할만한 이유는 찾지 못했다. 다만 전달받은 date가 안전하게 쓰이고 있다는 것을 이해했고 그리고 항상 이렇게 사용하고 난 후에는 메모리에서 해제해 줘야 한다는 것도 알게되었다. 클로저를 더 자주 사용하거나 혹은 class의 private 기능을 익혀서 실제 객체지향디자인을 하는데 활용해보고싶다.