전역변수 대신 전역함수를 재정의하기

eungook·2020년 1월 6일
0

전역변수를 왜 썼더라? 🤔

한 번 스톱워치를 생각해보면요..
시작 버튼을 누르면 시작하고, 정지 버튼을 누르면 멈추는.. 약간 이런 느낌일까요?

let interval; // global variable

function start() {
  interval = setInterval(tick, 1 * 1000); // 1000ms = 1sec
}

function stop() {
  clearInterval(interval);
}

이런 느낌이겠죠?
음.. 이걸 한 번 전역함수를 재정의하는 방식으로 다시 만들어볼게요

function stop() {}

function start() {
  const interval = setInterval(tick, 1 * 1000); // local variable // 1000ms = 1sec
  stop = () => clearInterval(interval); // redefine a function
}

동일하게 동작할 것 같습니다.

전역변수에 언제 넣어줬더라? 🤔

전역변수를 왜 쓰냐면..
이렇게 나중에 다시 사용하려고죠

function stop() {
  clearInterval(interval);
}

그치만 사실 여기서 interval이라는 전역변수의 값을 신뢰할 수 없습니다.

function stop() {
  const isValid = (interval > '');
  if (isValid == false) {
    return false; 
  }
  
  clearInterval(interval);
}

값을 언제 넣어줬는지, 잘 넣어줬는지 알 수가 없거든요.
그래서 이런 검증 과정이 필요합니다.
함수가 10개라면 10번 필요하겠네요
그러면 이런 검증 부분을 따로 함수로 빼겠죠?

function stop() {
  if (isValid() == false) {
    return false;
  }
  
  clearInterval(interval);
}

function isValid() {
  const is = (interval > '');
  return is;
}

여기서 어떤 예감이 드시나요?
이렇게 앞으로 코드는 더 더 자라나게 될 거라는..;;

별 고민 없이 개발하기!

전역변수를 왜 썼더라?
전역변수를 언제 넣어줬더라?
사실 전역변수는 안 쓸 수가 없습니다.. 상태는 반드시 필요하거든요

상태관리는 사실 정말 복잡한 문제입니다
그래서 이 고민을 피하기가 어렵습니다.

음.. 그래서 피할 수 있을 때 피하자 라는 느낌으로
전역변수 대신 전역함수를 재정의해서 사용하고 있습니다. 이상이에요~ 🙂

추신:

결과값 검증과 상태값 검증은 물론 다른거고
여기서는 상태값 검증을 피해보자 라는 느낌으로 생각해주세요~

추신2:

사실 clearInterval()undefined를 넣어도 에러가 발생하지는 않습니다.
~~(이걸 맨 마지막에 말하네)~~
~~(나쁘다 그쵸ㅋㅋ)~~

profile
= v =?;;

0개의 댓글