학습 공간 개념 · 판단 · 실험

Fanta Lab

질문 128 · 실전 면접 답변

Namespace와 Module은 어떤 경계가 다른가요?

이렇게 답해 보세요 (핵심 답변)

모듈(ES Module)은 파일 하나를 독립된 스코프로 보고 import/export로 파일 간 의존성과 공개 경계를 명시하는 표준 시스템이며, 브라우저·번들러·Node.js의 모듈 로더와 직접 연결됩니다. 반면 namespace는 모듈 표준 이전에 전역 이름 충돌을 피하려고 TypeScript가 도입했던 문법으로, 일반 객체 코드로 변환될 뿐 의존성 로딩이나 트리 셰이킹을 처리해 주지 않습니다. 따라서 현대 프로젝트에서는 파일 기반의 ES 모듈을 사용합니다.

함께 설명하면 좋은 이유 (꼬리질문 대비)

  1. 파일 안에 최상위 import나 export가 하나라도 있으면 TypeScript는 그 파일을 전역 스크립트가 아닌 독립된 모듈 스코프로 취급합니다.
  2. 오늘날 namespace 문법은 주로 외부 전역 라이브러리의 타입 선언 파일(.d.ts)에서 하위 타입들을 묶어 표현할 때만 제한적으로 볼 수 있습니다.

면접에서 자주 하는 실수

새로 작성하는 TypeScript 프로젝트에서 코드 정리를 위해 ES 모듈 안에 다시 불필요한 namespace를 중첩해 쓰는 것은 권장되지 않습니다.

원리와 예제까지 읽기

공식 참고 자료

질문 목록 출처 ↗ · 원본 128번을 바탕으로 질문과 답변을 새로 정리했습니다.

← TypeScript