Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

전역 변수의 문제점 본문

Programming Language/JavaScript

전역 변수의 문제점

scarecrow1992 2021. 3. 8. 16:27
  1. 전역 변수는 암묵적 결합을 허용한다.
    • 암묵적 결합 : 전역변수를 코드 어디서든 참조하고 할당할 수 있는 성질
  2. 긴 생명주기
    • 메모리 리소스를 차지하는 기간이 길어진다.
  3. 스코프 체인상에 종점에 존재
    • 검색 속도가 느리다.
  4. 네임스페이스 오염
    • 자바스크립트는 파일이 분리되어 있어도 하나의 전역 스코프를 공유한다.
    • 다른 파일 내에 동일한 이름으로 명명된 전역 변수나 함수가 같은 global scope 상에 존재함에 따라 유지보수가 어려워진다.

 

 


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

1. 즉시 실행 함수

  • 모든 코드를 즉시 실행 함수로 감싸면 모든 전역 변수는 즉시 실행 함수의 지역변수가 된다.
1
2
3
4
5
6
(function () {
    var foo = 10;
    // ...
}());
 
console.log(foo);   // ReferenceError
cs

 

2. 네임스페이스 객체

  • 전역에 네임스페이스 역할을 담당할 객체를 생성하고 전역 변수처러 ㅁ사용하고 싶은 변수를 프로퍼티로 추가하는 방법이다.
1
2
3
4
5
6
7
8
9
10
11
12
var MYAPP = {}; // 전역 네임스페이스 객체
 
MYAPP.name = 'Lee';
 
MYAPP.person = {
    age: 20,
    address: 'Seoul'
}
 
console.log(MYAPP.name);            // Lee
console.log(MYAPP.person.age);      // 20
console.log(MYAPP.person.address);  // Seoul
cs

 

  • 장점 : 식별자 충돌을 방지
  • 단점 : 네임스페이스 객체 자체가 전역 변수에 할당 되므로 그다지 유용하지 않다.

 

 

3. 모듈 패턴

  • 전역 변수의 억제와 캡슐화를 구현할 수 있다.
    • 캡슐화 : 모듈화 + 정보 은닉
  • 자바스크립트는 public, private, protected 같은 접근 제한자를 제공하지 않으므로 아래의 방법을 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var Counter = (function(){
    // private
    var num = 0;
 
    // public
    return {
        increase() {
            return ++num;
        },
        decrease() {
            return --num;
        },
        getNum() {
            return num;
        }
    }
}());
 
console.log(Counter.num);           // undefined;
 
console.log(Counter.increase());    // 1
console.log(Counter.increase());    // 2
console.log(Counter.decrease());    // 1
console.log(Counter.getNum());      // 1
cs

 

 


4. ES6 모듈

...

 

 

 

 

 

'Programming Language > JavaScript' 카테고리의 다른 글

프로퍼티 어트리뷰트  (0) 2021.03.08
변수의 생명주기  (0) 2021.03.08
스코프(scope)  (0) 2021.03.07
var와 let, const  (0) 2021.03.07
함수  (0) 2021.03.04
Comments