메타 스터디/JavaScript

전역 변수의 문제점(the problem with global variable)

B.Rabtle 2022. 5. 18.

변수의 생명 주기

  • 메모리 공간 확보(allocate), 해제(release), 가용 메모리 풀(memory pool)에 반환까지
  • 메모리 공간의 해제(release)는 어떻게 되는 걸까?
    • 가비지 콜렉터가 더이상 참조되지 않는 메모리 공간으로 인식하면 해당 메모리 공간을 해제한 후 memory pool에 반환한다.

지역변수의 생명 주기

  • 함수 생명주기가 끝날 때까지

전역 변수의 생명주기

  • 모든 실행문들이 실행된 후 사라짐
  • window 객체가 있는 웹 페이지를 예시로 들면 모든 웹페이지를 종료 할때 사라진다.

문제점

  • 모든 코드가 암묵적 결합(implicit binding)의 가능 성을 가지기 때문에 값이 변할 위험이 크다.

해결법

  • 생명 주기를 줄인다.
  • 어떻게?
  • 스코프를 줄인다.
  • 어떻게? 4가지 방법이 있다.
  • 즉시 실행함수를 사용해 전역 변수의 암묵적 결함 가능성을 없앤다.
  • 네임스페이스 객체를 사용 하는 방법도 있지만 쓰잘 데기 없는 이유는 네임스페이스 객체와 전역 변수 사이의 암묵적 결합 가능성이 남아 있기 때문이다.
  • 클래스를 모방한 모듈 패턴을 사용해 private, public 기능 구현이 가능하다. 구현 방식이 꽤나 흥미롭다. 아직 배우지 않은 클로저라는 기능이 전역 변수를 억제한다고 하는 것만 일단 알아두면 될 것 같다.
  • ES6 모듈을 사용해 파일들의 독자적 모듈 스코프를 제공 한다는데 mjs 확장자만 가능한 것인지 의문이 든다.. mjs 파일들을 제외한. js파일들에 적힌 프로퍼티들을 구분 없이 중복될 수도 있다는 말인가? 사용해봐야 무슨 말인지 조금 더 잘 알 것 같다. 의문점만 남겨두자.

댓글