한 번 스톱워치를 생각해보면요..
시작 버튼을 누르면 시작하고, 정지 버튼을 누르면 멈추는.. 약간 이런 느낌일까요?
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;
}
여기서 어떤 예감이 드시나요?
이렇게 앞으로 코드는 더 더 자라나게 될 거라는..;;
전역변수를 왜 썼더라?
전역변수를 언제 넣어줬더라?
사실 전역변수는 안 쓸 수가 없습니다.. 상태는 반드시 필요하거든요
상태관리는 사실 정말 복잡한 문제입니다
그래서 이 고민을 피하기가 어렵습니다.
음.. 그래서 피할 수 있을 때 피하자 라는 느낌으로
전역변수 대신 전역함수를 재정의해서 사용하고 있습니다. 이상이에요~ 🙂
결과값 검증과 상태값 검증은 물론 다른거고
여기서는 상태값 검증을 피해보자 라는 느낌으로 생각해주세요~
사실 clearInterval()
에 undefined
를 넣어도 에러가 발생하지는 않습니다.
(이걸 맨 마지막에 말하네)
(나쁘다 그쵸ㅋㅋ)