TypeScript에서 모듈화는 코드를 여러 파일로 나누고 필요한 부분만 불러와 사용하는 방법이다.
이는 코드를 더 구조화되고 유지보수하기 쉽게 만들어준다.
TypeScript는 JavaScript의 ES6 모듈 시스템을 기반으로 하며, import 와 export 를 사용해 모듈을 관리한다.
모듈(Module)이란?
TypeScript에서 파일 하나가 하나의 모듈!
파일 내부의 변수, 함수, 클래스 등을 다른 파일에서 사용할 수 있도록 내보내거나, 다른 파일에서 가져올 수 있다.
export 키워드
Named Export (이름 내보내기)
// math.ts
export const add = (a: number, b: number): number => a + b;
export const subtract = (a: number, b: number): number => a - b;
가져올 땐 import 키워드 사용
// app.ts
import { add, subtract } from './math';
console.log(add(3, 2)); // 5
console.log(subtract(3, 2)); // 1
Default Export (기본 내보내기)
모듈에서 하나의 기본 값만 내보낼 때 사용한다.
// logger.ts
export default function log(message: string): void {
console.log(message);
}
가져오는 파일에서 이름은 자유롭게 정할 수 있다.
// app.ts
import log as logger from './logger';
logger("Hello, TypeScript!"); // "Hello, TypeScript!"
Named + Default Export
하나의 파일에서 default export와 named export를 함께 사용 가능하다.
// utils.ts
export default function greet(name: string): string {
return `Hello, ${name}!`;
}
export const version = "1.0.0";
// app.ts
import greet, { version } from './utils'; // greet가 default
console.log(greet("Alice")); // "Hello, Alice!"
console.log(version); // "1.0.0"
import 키워드
다른 모듈에서 내보낸 구성 요소를 가져오는 데 사용한다.
Named Import
import { 함수명, 변수명 } from './파일경로';
Default Import
import 함수명 from './파일경로';
Alias 사용
import { 함수명 as 다른이름 } from './파일경로';
모든 내보내기 가져오기
import * as MathUtils from './math';
console.log(MathUtils.add(3, 2)); // 5
console.log(MathUtils.subtract(3, 2)); // 1
모듈화의 장점
1. 코드 재사용
: 한 번 작성한 코드를 여러 파일에서 재사용 가능
2. 가독성
: 코드를 파일별로 분리하여 더 구조적으로 작성
3. 유지보수
: 파일을 독립적으로 관리할 수 있어 수정이 쉽고 안전
4. 네임스페이스 관리
: 전역 변수 충돌 방지
예제
파일 구조
src/
├── math.ts
├── logger.ts
└── app.ts
math.ts
export const add = (a: number, b: number): number => a + b;
export const subtract = (a: number, b: number): number => a - b;
logger.ts
export default function log(message: string): void {
console.log(message);
}
app.ts
import log from './logger';
import { add, subtract } from './math';
log(`Addition: ${add(3, 2)}`); // "Addition: 5"
log(`Subtraction: ${subtract(3, 2)}`); // "Subtraction: 1"
그런데 TypeScript에서는 a.ts의 변수나 함수를 b.ts에서도 import, export 없이 사용이 가능하다.
이는 TypeScript가 글로벌 스코프에 있는 모듈을 처리하기 때문이다.
// a.ts
function hello() {
console.log("Hello from a.ts");
}
// b.ts
hello(); // import 없이 사용 가능
import, export를 사용하지 않으면 모듈로 간주되지 않고, 글로벌 스코프에 포함된다.
이 경우, 파일 내의 모든 변수, 함수, 클래스는 전역적으로 선언된 것처럼 동작하고 다른 파일에서도 암묵적으로 접근이 가능하다.
글로벌 스코프를 사용하게 되면 충돌 가능성, 유지보수 어려움 등의 문제가 있으니, 모듈화를 하여 사용하는 것이 좋다!
'개발 > TypeScript' 카테고리의 다른 글
[TypeScript] TypeScript의 비동기 함수 (0) | 2024.12.11 |
---|---|
[TypeScript] TypeScript의 상수 단언 (0) | 2024.12.11 |
[TypeScript] TypeScript의 유틸리티 타입 (0) | 2024.12.10 |
[TypeScript] TypeScript의 고급 타입 (1) | 2024.12.10 |
[TypeScript] TypeScript의 다양한 타입 (0) | 2024.12.06 |