[typescript] 네임스페이스와 모듈의 차이점

TypeScript에서는 네임스페이스모듈이라는 두 가지 방법을 사용하여 코드를 구성하고 관리할 수 있습니다. 이 두 가지 개념은 비슷해 보일 수 있지만, 실제로는 다른 목적과 사용 사례가 있습니다. 다음은 네임스페이스와 모듈의 주요 차이점에 대한 설명입니다.

네임스페이스

네임스페이스는 코드를 전역 스코프에서 논리적으로 그룹화하는 데 사용됩니다. 이것은 일종의 이름 공간으로, 변수, 함수, 클래스 등을 하나의 네임스페이스에 묶어서 중복을 방지하고 구조화된 코드를 작성할 수 있게 해줍니다.

다음은 간단한 네임스페이스의 예제입니다.

namespace MyNamespace {
  export interface MyInterface {
    // ...
  }

  export function myFunction() {
    // ...
  }

  export class MyClass {
    // ...
  }
}

위의 예제에서 MyNamespace는 네임스페이스를 나타내며 여러 인터페이스, 함수, 클래스 등을 포함할 수 있습니다.

모듈

반면에, 모듈은 코드를 별도의 파일로 분리하여 관리하는 데 사용됩니다. 이를 통해 코드를 논리적으로 그룹화하고 재사용성을 늘릴 수 있습니다. 모듈화된 코드는 다른 파일에서 import 문을 사용하여 불러올 수 있습니다.

다음은 간단한 모듈의 예제입니다.

// MyModule.ts
export interface MyInterface {
  // ...
}

export function myFunction() {
  // ...
}

export class MyClass {
  // ...
}

다른 파일에서 MyModule을 사용하는 예제는 다음과 같습니다.

import { MyInterface, myFunction, MyClass } from './MyModule';

// ...

결론

네임스페이스와 모듈은 코드를 구조화하고 관리하는 데 사용되지만, 네임스페이스는 주로 전역 스코프에서의 그룹화에, 모듈은 파일 단위로의 코드 재사용에 주로 사용됩니다. 이러한 차이를 이해하고 적절히 활용함으로써 TypeScript 프로젝트의 구조를 효율적으로 관리할 수 있습니다.

참고 자료: TypeScript Handbook - Namespaces, TypeScript Handbook - Modules