Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions 챕터_11/박승훈.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
## 들어가며

- 네임스페이스 : 코드 단위를 고유한 식별자로 그룹화한 것
- 하나의 식별자를 여러 네임스페이스에서 참조 가능
- 전역 네임스페이스 내에 존재하는 다른 객체나 변수와의 충돌을 방지
- 프로그램의 기능들을 체계적으로 구성
- JS는 다른 언어들처럼 네임스페이스를 기본적으로 지원하지는 않음
- 단, **객체와 클로저를 활용하여 비슷한 효과를 낼 수 있음**

## 단일 전역 변수 패턴

> 하나의 전역 변수를 주요 참조 객체로 사용하는 방식

```javascript
const myUniqueApplication = (() => {
function myMethod() {
// 코드
return;
}

return {
myMethod
};
})();


myUniqueApplication.myMethod();
```

- 가장 큰 문제점은 **다른 개발자가 같은 이름의 전역 변수를 이미 사용하고 있을 가능성이 있음**


## 접두사 네임스페이스 패턴

> 고유한 접두사를 선정한 다음, 모든 메서드, 변수, 객체를 이 접두사 뒤에 붙여 정의

```javascript
const myApplication_propertyA = {};
const myApplication_propertyB = {};
function myApplication_MyMethod() {
// 코드
return;
}
```

- **단일 전역 변수 문제에 대한 해결책 중 하나**
- 전역에서 특정 변수와 이름이 겹칠 가능성을 효과적으로 줄임
- 스스로 고유한 이름을 가진 객체도 같은 효과를 낼 수 있음
- 문제점1 : **애플리케이션이 커질수록 많은 전역 객체가 생성됨**
- 문제점2 : **다른 개발자가 같은 접두사를 전역 네임스페이스에서 사용하지 않고 있었을 것이라고 가정**


## 객체 리터럴 표기법 패턴

> 키와 값으로 이뤄진 집합

```javascript
myApplication.foo = () => "bar";

myApplication.utils = {
toString() {
// ...
},
export() {
// ...
}
}
```

- 키 자체가 새로운 네임스페이스가 될 수 있음
- 전역 네임스페이스를 오염시키지 않으면서도 코드와 매개변수를 논리적으로 구성하는 데 도움
- 동일한 이름의 변수가 있는지 검사하도록 설계되는 경우가 많음 -> 충돌 가능성을 크게 줄여줌
- 장점1 : 키-값 구조이므로 알아보기 쉬움
- 장점2 : 애플리케이션 내의 서로 다른 로직이나 기능을 쉽게 캡슐화하여 깔끔하게 분리
- 장점3 : 코드 확장에 있어 든든한 기반 제공
- JSON은 사실 객체 리터럴 표기법의 서브셋


## 중첩 네임스페이스 패턴

> 객체 리터럴 표기법 패턴을 확장한 것

```javascript
YAHOO.util.Dom.getElementsByClassName("test");
```

- 다른 패턴에 비해 충돌 위험이 낮음
- 단일 객체 네임스페이스 패턴과 성능상 차이가 크지 않음


## 즉시 실행 함수 표현식 패턴

```javascript
(() => { /** */ })();

(function foobar() { /** */ })();

function foobar() {
foobar();
}
```

- JS에서는 즉시 실행 함수로 정의된 내부의 변수와 함수 모두 외부에서 접근 불가능
- 함수를 호출하는 것만으로도 쉽게 코드의 은닉성 구현 가능
- 애플리케이션의 로직을 캡슐화하여 전역 네임스페이스로부터 보호


## 네임스페이스 주입 패턴

> 즉시 실행 함수 패턴의 또다른 변형

- 함수 내에서 this를 네임스페이스의 프록시로 활용
- 특정 네임스페이스와 속성을 '주입'
- 장점1 : 여러 객체나 네임스페이스에 기능적인 동작을 쉽게 적용 가능
- 장점2 : 이후에 확장될 기본 메서드(예: 게터, 세터)에 적용할 때 유용
- 단점 : 같은 목적을 달성하는 더 쉽고 효율적인 방법이 존재할 수도 있음


## 나의 생각

이번 장은 전반적으로 저자가 알고 있는 지식과 경험을 토대로 내용을 많이 적은 것 같아요. 그래서 중간중간 나오는 내용도 지식의 전달이라기보다는 '나는 이게 나은 것 같다', '나의 주관적인 의견이다'라는 식으로 얘기를 많이 하고 있죠. 그런데 이게 독자에게 결정권을 주거나 사고의 확장을 노린 것일 수도 있지만, 한편으로는 책으로 쓰는 동안도 지식의 확신이 제대로 든 것일까 의문이 들기도 했어요.
Loading