고급 TypeScript - 모듈과 네임스페이스: 모듈 시스템
모듈과 네임스페이스: 모듈 시스템
모듈 시스템은 TypeScript에서 코드의 구조를 효과적으로 관리하고, 재사용성을 높이며, 충돌을 방지하는 데 중요한 역할을 합니다. 모듈은 특정 기능이나 데이터를 캡슐화하여 다른 부분에서 쉽게 사용할 수 있도록 해줍니다. 이를 통해 대규모 애플리케이션의 유지보수성과 가독성을 크게 향상시킬 수 있습니다.
1. 모듈이란?
모듈은 관련된 코드 조각들을 그룹으로 묶는 단위입니다. 각 모듈은 자신의 범위를 가지며, 외부와의 상호작용을 명확하게 정의합니다. TypeScript에서는 export
키워드를 사용하여 다른 파일 또는 모듈에서 접근할 수 있는 요소를 지정합니다.
예제:
// math.ts
export function add(a: number, b: number): number {
return a + b;
}
export function subtract(a: number, b: number): number {
return a - b;
}
위 예제에서는 두 개의 함수 add
와 subtract
가 정의된 math.ts
라는 파일이 있습니다. 이 함수들은 다른 파일에서 사용할 수 있도록 export
되었습니다.
2. 모듈 가져오기
다른 모듈에 정의된 요소를 사용하려면 해당 요소를 가져와야 합니다. TypeScript에서는 import
문을 사용하여 필요한 기능들을 불러올 수 있습니다.
예제:
// main.ts
import { add, subtract } from './math';
console.log(add(5, 3)); // 출력: 8
console.log(subtract(5, 3)); // 출력: 2
여기서 main.ts
는 이전에 만든 math.ts
로부터 함수를 가져와서 사용하는 모습입니다.
3. 기본 및 전체 내보내기
TypeScript에서는 기본 내보내기(default export
)와 전체 내보내기(named export
)를 지원합니다. 기본 내보내기는 하나의 값만 내보낼 때 유용하며, 전체 내보내기는 여러 값을 동시에 내보낼 때 사용됩니다.
예제 (기본 내보내기):
// calculator.ts
export default function multiply(a: number, b: number): number {
return a * b;
}
// main.ts
import multiply from './calculator';
console.log(multiply(4, 5)); // 출력: 20
4. 네임스페이스란?
네임스페이스는 같은 이름을 가진 변수나 클래스를 구분하기 위한 방법입니다. 이는 특히 전역 스코프에 많은 변수가 있을 경우 유용합니다. 네임스페이스 내부에 선언한 모든 것은 자동으로 그 네임스페이스 안으로 포함됩니다.
예제:
namespace Geometry {
export class Circle {
constructor(public radius: number) {}
area(): number {
return Math.PI * this.radius ** 2;
}
}
export class Square {
constructor(public sideLength: number) {}
area(): number {
return this.sideLength ** 2;
}
}
}
// 사용 예시:
const circle = new Geometry.Circle(10);
console.log(circle.area()); // 출력 : 원 면적 계산 결과
const square = new Geometry.Square(5);
console.log(square.area()); // 출력 : 정사각형 면적 계산 결과
위 예제에서 우리는 두 개의 도형 클래스인 Circle과 Square를 포함하는 Geometry라는 네임스페이스를 만들었습니다.
결론
TypeScript의 모듈 시스템과 네임스페이스는 코드 조직화 및 재사용성을 높이는 데 매우 유용한 도구입니다. 다양한 프로젝트 환경에서도 이러한 구조화를 통해 개발자들이 서로 협력하고 코드를 쉽게 이해할 수 있도록 돕습니다.