[JS] 14. 전역 변수의 문제점

윤결심·2022년 3월 31일
0

JS

목록 보기
13/14
post-thumbnail

14.1 변수의 생명 주기

  1. 지역 변수의 생명 주기

    변수에 생명주기가 없다면 한번 선언된 변수는 프로그램을 종료하지 않는 한 영원히 메모리 공간 점유

    지역변수의 생명 주기 == 함수의 생명 주기

    변수의 생명 주기는 메모리 공간이 확보된 시점부터 메모리 공간이 해제되어 가용 메모리 풀에 반환되는 시점까지

    var x = 'global';
    
    function foo() {
    	console.log(x); // undefined(변수 호이스팅 때문에)
    	var x = 'local';
    }
    
    foo();
    console.log(x) // global
    
    // 호이스팅은 스코프 단위로 동작. 변수 선언이 스코프의 선두로 끌어올려진 것처럼 동작하는 자바스크립트 특징. 
  2. 전역 변수의 생명 주기

    전역 변수의 생명 주기 == 전역 객체의 생명 주기

    전역 객체는 코드가 실행되기 이전 단계에서 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체. 브라우저에서는 window, Node.js 에서는 global 객체를 의미

14.2 전역 변수의 문제점

  1. 암묵적 결합

    변수의 유효범위가 커지면 코드의 가독성은 떨어지고 의도치 않게 상태가 변경될 수 있는 위험도도 높아짐

  2. 긴 생명주기

    상태 변경에 의한 오류 발생 확률이 높음. 메모리 리소스를 오랜 기간 소비.

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

    전역 변수의 검색 속도가 가장 느림

  4. 네임스페이스 오염

    자바스크립트는 파일이 분리되어 있다 해도 하나의 전역 스코프를 공유. 동일한 이름으로 명명된 함수가 어떤 결과를 초래할지 모름

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

전역 변수를 반드시 사용해야 할 이유를 찾지 못한다면 지역 변수를 사용. 변수의 스코프는 좁을 수록 좋음

  1. 즉시 실행 함수

    모든 코드를 즉시 실행 함수로 감싸면 모든 변수는 즉시 실행 함수의 지역 변수가 됨. 라이브러리 등에 자주 사용

  2. 네임스페이스 객체

    네임스페이스를 식별자 충돌을 방지하는 효과는 있으나 그다지 유용하지 않음

  3. 모듈 패턴

    클래스를 모방해 관련이 있는 변수와 함수를 모아 즉시 실행 함수로 감싸 하나의 모듈을 만듦. 클로저를 기반으로 동작(24장에서 배움)

    특징: 전역 변수의 억제는 물론 캡슐화까지 구현 가능

  4. ES6 모듈

    ES6을 사용하면 더는 전역 변수 사용 불가. ES6 모듈은 파일 자체의 독자적인 모듈 스코프를 제공.

0개의 댓글

관련 채용 정보