Files
2nd/01_Archive/2026-04-20/브랜디드 타입.md
T

4.0 KiB

id, category, confidence_score, tags, last_reinforced, github_commit
id category confidence_score tags last_reinforced github_commit
P-REINFORCE-AUTO-94A8AB 10_Wiki/💡 Topics/Programming & Language 0.90
auto-reinforced
2026-04-20 [P-Reinforce] Continuous Worker - 브랜디드 타입

브랜디드 타입

📌 한 줄 통찰 (The Karpathy Summary)

지식 요약 정보 추출 중...

📖 구조화된 지식 (Synthesized Content)

  • 등장 배경 및 동작 원리: TypeScript의 타입 시스템은 객체의 형태가 같으면 호환을 허용하는 구조적 타이핑(덕 타이핑)을 따르기 때문에, 완전히 다른 맥락의 원시 데이터(예: 이메일과 이름)가 혼용되는 실수를 잡기 어렵습니다 [5, 6]. 이를 막기 위해 컴파일 타임에만 존재하는 고유 속성(__brand, unique symbol 등)을 원래의 타입과 교집합(&)으로 묶어 비구조적(명목적) 타입 매칭과 유사한 효과를 얻습니다 [3, 7, 8].
  • 주요 활용 사례:
    • 수치 데이터 보호: 일반 number 타입 대신, 양수만 허용하거나 특정 통화(EUR, GBP 등), 0에서 1 사이의 퍼센트 값만을 허용하는 브랜디드 타입을 선언하여 논리적 오류를 방지합니다 [9-11].
    • 문자열 제약 및 식별자: XSS 공격을 방지하기 위해 검증이 완료된 문자열(Sanitized String)을 명시하거나, 데이터베이스의 여러 식별자(UserId, OrderId, CommentId 등)가 서로 잘못 할당되는 것을 막을 때 사용됩니다 [5, 12-14].
  • 생성과 브랜드 강도:
    • 타입 단언(as), 타입 가드(Type Predicates), 단언 함수(Assertion Functions) 등을 통해 런타임 검증 로직을 거친 후 일반 값을 브랜디드 타입으로 변환할 수 있습니다 [8, 15, 16].
    • unique symbol을 사용해 브랜드를 정의하면 모듈 간에도 고유성이 보장됩니다 [3]. 구현 방식에 따라 약한 브랜드(기본 타입으로 암시적 변환 허용), 강한 브랜드(명시적 캐스팅 필수), 슈퍼 브랜드(외부로의 변환 철저히 차단)로 분류하여 적용할 수 있습니다 [5, 17, 18].
  • 라이브러리와의 통합 및 대안:
    • ts-brand, Effect TS 같은 커뮤니티 라이브러리를 통해 브랜디드 타입 생성을 자동화하거나 유틸리티 함수를 사용할 수 있습니다 [19, 20]. 또한, 런타임 유효성 검사 라이브러리인 Zod.brand() 메서드를 지원하여 런타임 검증과 컴파일 타임의 브랜디드 타입을 통합할 수 있게 돕습니다 [21].
    • 브랜디드 타입은 시스템 복잡성을 증가시킬 수 있으므로, 제한된 값의 목록을 다룰 때는 유니온(Union) 타입, 열거형(Enum), 또는 템플릿 리터럴 타입 같은 대안이 더 적절할 수 있습니다 [22-25].

⚠️ 모순 및 업데이트 (Contradictions & RL Update)

  • 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
  • 정책 변화: Programming & Language 분야의 자동 자산화 수행.

🔗 지식 연결 (Graph)

  • Related Topics: 구조적 타이핑, 명목적 타이핑, Opaque Types
  • Projects/Contexts: 도메인 기반 설계(DDD), 런타임 유효성 검사(Zod)
  • Contradictions/Notes: TypeScript에서 공식적으로 브랜디드 타입(명목적 타이핑)을 내장 기능으로 지원하지는 않으며, 개발자가 & 연산자와 가상 속성을 이용해 우회적으로 구현하는 방식입니다 [6, 8]. 또한, 이 기법은 코드의 정밀성을 높여주지만 복잡성 역시 증가시키므로, 실제 이점이 단점을 상회하는지 신중히 판단하고 대안(예: 단순 Union이나 Enum)을 사용하는 방법도 함께 고려해야 합니다 [22, 26].

Last updated: 2026-04-18

  • Raw Source: 00_Raw/2026-04-20/브랜디드 타입.md