프로그래밍 언어/JavaScript

[자바스크립트 필기] #9 - 전역 변수의 문제점

SpaceCowboy 2021. 8. 2. 11:31

 

*이 필기는 웹 프로그래밍 튜토리얼에서 보고 작성합니다. 

 

1. 변수의 생명 주기

변수는 생성되고 소멸되는 생명 주기가 있다. 

  • 전역 변수의 생명 주기는 프로그램의 생명 주기와 같다. 즉, 프로그램이 끝날 때 전역 변수도 끝난다는 말이다. 
  • 함수 내부에서 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료되면 소멸된다. - 지역 변수의 생명주기는 함수의 생명주기와 같다. 

그리고 다음의 예제를 보자 

var x = 'global';

function foo() {
    console.log(x); // ??
    var x = 'local';
}

foo();
console.log(x); // global

여기서 foo 함수 내부에서 console.log(x) 를 실행하기 전에 지역변수 x가 이미 선언되었고 undefined로 초기화 되었다. 따라서 console.log(x) 를 실행하면 undefined가 출력된다. 그리고 그 지역변수 x에 'local'이 할당된다. 

 

이런 현상을 호이스팅이라고 하는데 이런 호이스팅은 스코프를 단위로 실행된다.

  • 전역 변수의 호이스팅은 전역 변수의 선언이 전역 스코프의 선두(맨 처음)로 끌어 올려진 것처럼 작동한다. - 전역 변수는 전역 전체에서 유효하다. 
  • 지역 변수의 호이스팅은 지역 변수의 선언이 지역 스코프의 선두로 끌어 올려진 것처럼 동작한다. - 지역 변수는 함수 전체에서 유효하다. 

이 처럼 변수 선언이 스코프의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 고유 특징을 호이스팅이라고 한다.

 

2. 전역 변수의 문제점 

  • 암묵적 결합 - 전역 변수를 쓰게 되면 모든 코드가 전역 변수를 참조하고 변경할 수 있는 암묵적 결합을 허용하는 것이다. 따라서 코드의 가독성이 나빠지고, 의도치 않게 상태가 변경될 수 있는 위험성도 커진다.
  • 긴 생명 주기 - 생명 주기가 길기 때문에 메모리도 오랜 기간 소비한다. 
  • 스코프 체인 상에서 종점에 존재 - 변수를 검색할 때 전역 변수가 가장 마지막에 검색되므로 느리다. 
  • 네임스페이스 오염 - 다른 파일에서 동일한 이름으로 명명된 전역 변수로 인해 예상치 못한 결과를 가져올 수도 있다.

여기까지 입니다 - 틀린 점이 있다면 꼭 지적해주세요!