Search

241127_2229_TypeScript 그런데 namespace를 곁들인…

필독

모듈과 네임스페이스의 진화에 대한 추가 설명:
TypeScript 초기 버전에서 module 키워드는 내부 모듈을 정의하는 데 사용되었습니다. 그러나 ES6가 등장하면서 module이라는 용어가 ES6 모듈을 의미하게 되었고, 이를 구분하기 위해 내부 모듈을 namespace로 변경되었다.
이 과정에서 외부 모듈과 내부 모듈의 개념이 혼란스러울 수 있으니, 이 부분을 조금 더 상세하게 설명하고자 한다. (241127_2230 이후 업데이트 예정)
컴파일 결과의 차이에 대한 강조:
namespace와 ES 모듈은 컴파일 후 결과물이 다릅니다. namespace는 런타임에 실제 객체로 존재하게 되지만, ES 모듈은 그렇지 않습니다.
이는 트리 쉐이킹(tree-shaking)과 같은 최적화에 직접적인 영향을 미치므로, 이러한 차이를 강조하고자 한다. (241127_2230 이후 업데이트 예정)
타입 그룹화를 위한 대안 소개:
namespace를 타입 계층화에 사용하기도 하지만, 실제로는 ES 모듈 내에서 타입을 그룹화하는 것도 가능하다.
예를 들어, 타입 전용 모듈을 만들어서 관련된 타입들을 내보내거나, 별도의 네임스페이스 없이도 객체나 클래스를 활용하여 타입을 구성할 수 있다. . (241127_2230 이후 업데이트 예정)
namespace의 주요 사용 사례 추가:
namespace는 주로 선언 병합(declaration merging)과 전역 타입 정의에서 유용하다.
특히, 전역 스코프에 존재하는 라이브러리의 타입을 정의할 때나, 기존 모듈을 확장할 때 namespace가 필요할 수 있다.
이러한 사용 사례를 추가로 언급하며 namespace의 유용성에 설명하고자 한다. . (241127_2230 이후 업데이트 예정)
모듈 증강(Module Augmentation)에 대한 언급:
TypeScript에서는 기존 모듈을 확장하거나 새로운 타입을 추가하기 위해 모듈 증강 기능을 제공한다.
이 기능을 활용하면 namespace 없이도 모듈의 타입을 확장할 수 있으므로, 이에 대한 설명을 추가로 안내하고자 한다. (241127_2230 이후 업데이트 예정)
네임스페이스와 중첩 모듈에 대한 혼동 방지:
일부 개발자들은 네임스페이스와 중첩 모듈을 혼동할 수 있다.
ES6 모듈 내에서 객체나 클래스를 활용하여 코드를 계층적으로 구성할 수 있으며, 이는 네임스페이스와 유사한 구조를 가질 수 있다.
이 차이점은 추후에 안내하고자 한다. (241127_2230 이후 업데이트 예정)
현대적 툴링 지원에 대한 업데이트:
Webpack, Rollup, esbuild 등 현대적인 번들러들은 ES6 모듈을 완벽히 지원하며, 트리 쉐이킹과 코드 스플리팅 등의 최적화를 제공한다.
이러한 도구들의 발전으로 인해 namespace의 필요성이 더욱 줄어들었다.
최신 권장 사항 재강조:
TypeScript 팀이 일반적인 코딩에서는 ES6 모듈 사용을 권장한다
이는 코드의 일관성과 향후 유지 보수에 큰 도움이 될 수 있다.
namespace에서 모듈로의 마이그레이션 예시 추가:
실제 코드에서 namespace를 모듈로 전환하는 방법을 구체적으로 보여줄 예정 (241127_2230 이후 업데이트 예정)

안녕하세요

한국전자기술연구원 김영광입니다.
관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.

Hello

I'm Yeonggwang Kim from the Korea Electronics Research Institute.
For technical and business inquiries, please contact me at “glory@keti.re.kr”