본문 바로가기

스터디/[모던 자바스크립트 deep dive] JS

#14. 전역 변수의 문제점

1. 변수의 생명 주기

지역 변수의 생명 주기

  • 지역 변수는 함수가 호출되면 생성되고 함수가 종료되면 소멸한다.
  • 함수 내부에서 선언된 변수는 함수가 호출되기 이전까지는 생성되지 않는다.
  • 변수 선언은 실행 시점이 아니라 런타임 이전에 먼저 실행되며, 함수 호출 시에 변수 선언문이 가장 먼저 실행된다.

전역 변수의 생명 주기

  • 전역 변수는 전역 객체의 프로퍼티로 존재하며, 전역 객체는 프로그램이 실행되기 이전에 먼저 생성된다.
  • 브라우저 환경에서는 전역 객체가 window이며, 브라우저를 닫을 때까지 유효하다. 따라서 전역 변수의 생명 주기는 전역 객체의 생명 주기와 일치한다.

2. 전역 변수의 문제점

암묵적 결합

  • 모든 코드가 전역 변수를 참조하고 변경할 수 있는 암묵적 결합을 허용한다.
  • 변수의 유효 범위가 크면 클수록 코드의 가독성은 나빠지고 의도치 않게 상태가 변경될 수 있는 위험성도 높아진다.

긴 생명 주기

  • 전역 변수는 생명 주기가 길다.
  • 따라서 메모리 리소스도 오랜 기간 소비하고, 전역 변수의 상태를 변경 할 수 있는 시간도 길고 기회도 많다.

스코프 체인 상에서 종점에 존재

  • 전역 변수가 스코프 체인 상에서 종점에 존재한다는 것은, 변수를 검잭할 때 전역 변수가 가장 마지막에 검색된다는 것을 말한다.
  • 즉, 전역 변수의 검색 속도가 가장 느리다.

네임스페이스 오염

  • 자바스크립트의 가장 큰 문제점 중 하나는 파일이 분리되어 있다 해도 하나의 전역 스코프를 공유한다는 것
    => 다른 파일 내에서 동일한 이름으로 명명된 전역 변수나 전역 함수가 같은 스코프 내에 존재할 경우 예상치 못한 결과를 가져올 수 있다.

3. 전역 변수의 사용을 억제하는 방법

즉시 실행 함수

  • 함수 정의와 동시에 호출되는 즉시 실행함수는 단 한 번만 실행
  • 모든 코드를 즉시 실행 함수로 감싸면 모든 변수는 즉시 실행 함수의 지역 변수가 된다.

네임스페이스 객체

  • 전역에 네임스페이스 역할을 담당할 객체를 생성하고 전역 변수처럼 사용하고 싶은 변수를 프로퍼티로 추가하는 방법

모듈 패턴

  • 모듈 패턴 : 클래스를 모방해서 관련이 있는 변수와 함수를 모아 즉시 실행 함수로 감싸 하나의 모듈을 만든다.
    • 자바스크립트의 강력한 기능인 클로저를 기반으로 동작한다.
    • 모듈 패턴의 특징은 전역 변수의 억제는 물론 캡슐화까지 구현할 수 있다는 것이다.

'스터디 > [모던 자바스크립트 deep dive] JS' 카테고리의 다른 글

#16. 프로퍼티 어트리뷰트  (1) 2024.04.27
#15. let, const 키워드와 블록 레벨 스코프  (0) 2024.04.27
#13. 스코프  (0) 2024.04.27
#12. 함수  (1) 2024.04.06
#11. 원시값과 객체의 비교  (0) 2024.04.06