type의 종류와 상관 없이 코드를 그룹화 할 수 있다
변수, 함수, 객체 등
일반적인 타입과 달리 값을 가질 수 있다
같은 이름을 가진 타입을 재사용하거나
모듈 단위로 분리할 때 사용하면 좋을 것 같다
한 파일 안에서 공간을 분리할 때 등
한 파일(모듈) 내에 네임스페이스가 하나 뿐이라면 사용하면 안된다
네임스페이스는 자바스크립트로 컴파일될 경우 class 객체를 생성한다
복잡한 애플리케이션의 경우 namespace를 해칠 수 있기 때문에 사용을 자제하는
것이 좋다 (자동 병합이 되기 때문이 아닐까..)
interface 처럼 같은 이름으로 재작성 시 자동 병합이 일어나지만
export 해야 외부에서 값을 참조할 수 있다
export 하지 않으면 내부에서만 참조가 가능해 캡슐화를 구현할 수 있을 것으로 보인다
외부에서 참조할 때는 import 문을 사용한다
namespace A {
const a = 1;
export const getA = () => {
return a; // export 를 안해도 참조 가능
}
}
namespace B {
export b = 1;
export const getB = () => {
return b;
}
}
A.a // 참조 에러
B.b // 1
A.getA() // 1
B.getA() // 1