export 문법은 취향 문제가 아니라, 밖에서 읽을 이름이 몇 개인지, 파일이 대표값 하나인지, 묶음으로 다뤄야 하는지를 드러내는 설계다.
import { parse }처럼 이름이 고정된다.
Utils.parse()처럼 출처가 계속 보인다.
import type으로 분리한다.
export const parse = ...
import { parse } from "./parser"
export default Button
import Button from "./Button"
import * as MathUtil from "./math"
MathUtil.clamp(value)
| 기준 | named | default | namespace |
|---|---|---|---|
| API 표면 | 함수·타입·상수 여러 개를 공개한다. | 파일 대표값 하나를 공개한다. | 묶음 단위 공개 API를 유지한다. |
| 읽는 쪽 경험 | 이름이 고정되어 검색과 자동 완성이 쉽다. | 이름을 바꿔 가져올 수 있어 자유도가 높다. | 접두어가 붙어 출처와 책임이 보인다. |
| 점검 포인트 | 공개 이름 변경이 호출부에 미치는 범위를 본다. | 임의 이름이 팀 규칙을 흐리지 않는지 본다. | barrel과 재노출이 순환 의존을 만들지 않는지 본다. |
공개값의 개수와 대표성을 먼저 고르고, 그 다음 import 가독성, type-only 경계, barrel 재노출 여부를 확인하면 모듈 API가 흔들리지 않는다.