일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- String
- Dijkstra
- 스토어드 프로시저
- 다익스트라
- DP
- Hash
- binary search
- Trie
- Two Points
- Brute Force
- two pointer
- MYSQL
- SQL
- Stored Procedure
- 이진탐색
- union find
- 그래프
Archives
- Today
- Total
codingfarm
전역 변수의 문제점 본문
- 전역 변수는 암묵적 결합을 허용한다.
- 암묵적 결합 : 전역변수를 코드 어디서든 참조하고 할당할 수 있는 성질
- 긴 생명주기
- 메모리 리소스를 차지하는 기간이 길어진다.
- 스코프 체인상에 종점에 존재
- 검색 속도가 느리다.
- 네임스페이스 오염
- 자바스크립트는 파일이 분리되어 있어도 하나의 전역 스코프를 공유한다.
- 다른 파일 내에 동일한 이름으로 명명된 전역 변수나 함수가 같은 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