JavaScript에서 export default
와 export
는 모듈 시스템에서 매우 중요한 개념입니다. 이 글에서는 이 두 가지 방식의 차이점, 각각의 사용 방법, 그리고 다양한 예제와 함께 관리 측면에서 어떤 방식이 더 적절한지 알아보겠습니다.
1. export
와 export default
의 기본 개념
export
export
는 모듈에서 여러 가지 변수를 내보낼 때 사용합니다. 이 방식은 하나의 파일에서 여러 개의 함수를, 변수를, 혹은 클래스를 내보낼 수 있도록 해줍니다.
예시:
// mathUtils.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
해당 모듈을 가져올 때는 다음과 같이 사용합니다.
// main.js
import { add, subtract } from "./mathUtils";
console.log(add(2, 3)); // 5
console.log(subtract(5, 2)); // 3
export default
export default
는 모듈 시스템의 유연성과 편의성을 향상시키기 위해 개발되었습니다. 이 기능의 주요 필요 이유는 다음과 같다.:
- 단일 주요 기능 강조: 모듈에서 가장 중요하거나 주로 사용될 기능을 명확히 표시할 수 있습니다.
- 간편한 임포트: 기본 내보내기를 사용하면 임포트 시 중괄호 없이 간단하게 가져올 수 있어 코드 작성이 더 간결해집니다.
- 이름 변경의 자유: 임포트 시 원하는 이름으로 자유롭게 변경할 수 있어 코드의 가독성과 유지보수성이 향상됩니다.
- 라이브러리 설계 유연성: 라이브러리 작성자가 주요 기능을 강조하면서도 추가 기능을 일반 export로 제공할 수 있게 해줍니다.
이러한 이유로 export default
는 모듈 시스템에서 중요한 역할을 하며, 개발자들에게 더 나은 코드 구조화 옵션을 제공합니다.
예시:
// greet.js
const greet = (name) => `Hello, ${name}!`;
export default greet;
해당 모듈을 가져올 때는 다음과 같이 사용합니다.
// main.js
import greet from "./greet";
console.log(greet("Alice")); // Hello, Alice!
2. export
와 export default
의 차이점
특성 | export |
export default |
---|---|---|
내보낼 수 있는 항목 | 여러 개 | 하나만 가능 |
가져올 때 중괄호 사용 | 필수 | 사용하지 않음 |
이름 변경 | 가져올 때 자유롭게 변경 불가능 | 가져올 때 자유롭게 변경 가능 |
사용 시 주의사항 | 여러 항목을 내보낼 때 편리 | 기본값을 내보낼 때 유용 |
3. 다양한 예제 및 사용 방법
3.1 여러 개의 export
// shapes.js
export const circleArea = (radius) => Math.PI * radius * radius;
export const squareArea = (side) => side * side;
export const triangleArea = (base, height) => 0.5 * base * height;
가져올 때 필요한 부분만 가져올 수 있습니다.
// main.js
import { circleArea, squareArea } from "./shapes";
console.log(circleArea(5)); // 78.53981633974483
console.log(squareArea(4)); // 16
3.2 export default
와 export
의 혼합 사용
// calculator.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
const calculatorName = "Simple Calculator";
export default calculatorName;
가져올 때는 다음과 같이 사용합니다.
// main.js
import calculatorName, { add, subtract } from "./calculator";
console.log(calculatorName); // Simple Calculator
console.log(add(5, 3)); // 8
console.log(subtract(5, 3)); // 2
3.3 이름을 변경하여 가져오기
export default
의 경우 이름을 마음대로 변경할 수 있습니다.
// greet.js
export default function greet(name) {
return `Hello, ${name}!`;
}
// main.js
import sayHello from "./greet";
console.log(sayHello("Alice")); // Hello, Alice!
하지만 export
로 내보낸 것은 이름을 변경할 수 없습니다.
// math.js
export const multiply = (a, b) => a * b;
// main.js
import { multiply as times } from "./math"; // 가능
console.log(times(2, 3)); // 6
4. 예외 및 주의할 점
- 중복된
export default
사용 불가: 하나의 파일에서는 단 하나의export default
만 가능하기 때문에 중복 사용 시 에러가 발생합니다. - 중복된
export
가능:export
는 여러 개 사용할 수 있지만, 동일한 이름을 가진 변수를 여러 번 내보낼 수는 없습니다. export const name = "Alice"; export const name = "Bob"; // 에러 발생
- 잘못된 가져오기 시 에러 발생:
export
와export default
의 차이를 정확히 알고 사용해야 합니다.
// onetwo.js
export default function one() {}
export default function two() {} // 에러 발생
// greet.js
export default function greet(name) {
return `Hello, ${name}!`;
}
// main.js
import { greet } from "./greet"; // 에러 발생: export default를 중괄호로 가져올 수 없음
5. 장기적인 관리 측면에서의 선택
export
는 모듈 내에서 여러 기능을 제공할 때 유용합니다. 또한 이름이 명시적으로 지정되어 있어 코드의 가독성을 높입니다.export default
는 모듈의 대표적인 기능을 내보낼 때 편리합니다. 하지만 이름이 명시적이지 않아, 협업 시 어떤 기능을 가져오는지 파악하기 어려울 수 있습니다.
권장 사항
- 다수의 내보내기가 필요한 경우:
export
를 사용해 명시적인 구조를 유지하세요. - 단일 기능의 모듈인 경우:
export default
를 사용하여 간결한 코드를 유지하세요. - 함께 사용:
export
와export default
를 함께 사용하여 필요한 기능에 유연성을 주되, 모듈의 일관성을 유지하세요.
6. 실제 프로젝트에서의 예시
예시 1: 유틸리티 함수 모음
// utils.js
export function formatDate(date) {
/* ... */
}
export function parseQuery(queryString) {
/* ... */
}
export function generateRandomId() {
/* ... */
}
이 경우 여러 유틸리티 함수가 있으므로 export
를 사용하여 명시적으로 내보내는 것이 좋습니다.
예시 2: API 클라이언트
// apiClient.js
export default class ApiClient {
constructor(baseURL) {
/* ... */
}
get(endpoint) {
/* ... */
}
post(endpoint, data) {
/* ... */
}
}
API 클라이언트와 같이 하나의 클래스가 메인 역할을 하는 경우 export default
를 사용하여 가져오기 코드를 간결하게 유지할 수 있습니다.
7. 결론
export
와 export default
는 각각의 역할과 용도가 있으며, 상황에 따라 적절한 방식을 선택해야 합니다.
- 모듈의 가독성과 유지 보수성을 높이고자 한다면
export
를 주로 사용하되, 대표적인 기능을 내보낼 때는export default
를 활용하는 것이 좋습니다. - 협업 시나 프로젝트의 규모가 커질수록 명시적인
export
사용을 추천합니다.
최종 팁: 코드 일관성을 유지하고 팀 내에서 모듈 사용 규칙을 정하여 효율적인 모듈 관리 전략을 세우세요.
'JavaScript & TypeScript' 카테고리의 다른 글
CI 환경에서 `npm ci` 명령어를 사용해야 하는 이유 (1) | 2024.11.25 |
---|---|
Express.js 미들웨어의 역할 (TypeScript 버전) (0) | 2024.11.19 |
Volta - 프로젝트 별 node 관리 (0) | 2024.11.11 |
require와 import의 차이점: JavaScript 모듈 시스템 비교 (2) | 2024.11.05 |
JavaScript 변수 선언의 모든 것: var, let, const의 차이점과 올바른 사용법 (1) | 2024.10.29 |