[G1-Sync] Manual knowledge update

This commit is contained in:
Antigravity Agent
2026-05-10 22:08:15 +09:00
parent 21ac3ed255
commit 504fd5fb42
3011 changed files with 380280 additions and 206977 deletions
@@ -2,92 +2,33 @@
id: wiki-2026-0508-명목적-타이핑-nominal-typing
title: 명목적 타이핑(Nominal Typing)
category: 10_Wiki/Topics
status: needs_review
canonical_id: self
aliases: [P-Reinforce-AUTO-DCF544]
duplicate_of: none
status: duplicate
canonical_id: nominal-typing
duplicate_of: "[[Nominal Typing]]"
aliases: []
source_trust_level: A
confidence_score: 0.9
tags: [auto-reinforced]
raw_sources: []
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - 명목적 타이핑(Nominal Typing)"
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
tech_stack:
language: unspecified
framework: unspecified
verification_status: redirected
tags: [duplicate, typing, type-system]
last_reinforced: 2026-05-10
github_commit: pending
---
# [[명목적 타이핑(Nominal Typing)]]
# 명목적 타이핑(Nominal Typing)
## 📌 한 줄 통찰 (The Karpathy Summary)
> 명목적 타이핑(Nominal Typing)은 타입의 이름이나 명시적 선언이 일치해야만 호환성을 인정하는 타입 시스템 방식입니다 [1, 2]. 이는 객체의 실제 형태나 구조를 기준으로 타입을 결정하는 구조적 타이핑([[Structural Typing]])과 대비되는 개념으로, Java나 C#과 같은 전통적인 객체 지향 언어에서 주로 사용됩니다 [1, 2]. TypeScript는 구조적 타이핑을 따르지만, 명목적 타이핑의 엄격한 데이터 구분 효과를 얻기 위해 '브랜디드 타입(Branded Types)' 또는 '불투명 타입(Opaque Types)'과 같은 패턴을 활용합니다 [3-5].
> **이 문서는 [[Nominal Typing]] 의 중복본입니다.** Canonical 문서로 redirect.
## 📖 구조화된 지식 (Synthesized Content)
- **명목적 타이핑의 정의와 비유:** 명목적 타이핑은 런타임 구조가 유사하더라도 타입의 이름이나 명시적 선언이 다르면 타입 시스템에서 서로 다른 것으로 취급하는 엄격한 방식입니다 [2, 3]. 구조적 타이핑이 열쇠의 모양만 맞으면 자물쇠를 여는 방식이라면, 명목적 타이핑은 특정 신분증이 있어야만 문을 통과할 수 있는 방식에 비유할 수 있습니다 [2].
- **TypeScript에서의 한계:** [[JavaScript]]와 TypeScript는 본질적으로 덕 타이핑(Duck Typing) 및 구조적 타이핑에 의존하며, 명목적 타이핑이나 구별 가능한 타입 별칭을 직접적으로 생성하는 내장 메커니즘을 지원하지 않습니다 [3, 6]. 이로 인해 이메일 주소와 이름이 모두 구조적으로는 `string`일 때 이들을 구분하지 못하는 '기본 타입에의 집착(Primitive Obsession)'이라는 잠재적 문제가 야기될 수 있습니다 [5].
- **대안적 구현 방식 (Branded / Opaque Types):** TypeScript에서 명목적 타이핑과 같은 비구조적 타입 매칭을 구현하기 위해 브랜디드 타입(Branded Types) 또는 불투명 타입(Opaque Types)이라는 패턴을 사용합니다 [3, 4, 7]. 이는 런타임에는 실제로 존재하지 않지만 컴파일 시점에만 존재하는 고유한 속성(예: `__brand`, `__type` 또는 `unique symbol`)을 추가하여 동일한 기본 타입을 갖는 값들이 실수로 섞이는 것을 차단합니다 [5, 8-10].
- **실무 활용 맥락:** 이러한 명목적 타이핑 패턴은 도메인 기반 설계(DDD)에서 `UserId``OrderId`를 엄격히 분리하거나, 소독된(sanitized) 텍스트와 그렇지 않은 텍스트를 구분하는 등 의미적으로 다른 데이터를 안전하게 격리하는 데 사용됩니다 [5, 11, 12].
## 핵심 요약
- 타입 동등성을 매 이름(declaration) 기준으로 판단.
- Java, C#, Rust, Swift 의 기본. 매 같은 shape 도 다른 이름이면 다른 타입.
- TS 는 structural 이지만 branded type 으로 nominal 흉내 가능.
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
## 🔗 Graph
- 부모: [[Nominal Typing]] (canonical)
- 인접: [[Structural Typing]] · [[Branded Types]]
## 🔗 지식 연결 (Graph)
- **Related Topics:** [[구조적 타이핑(Structural Typing)]], 브랜디드 타입(Branded Types), 불투명 타입(Opaque Types)
- **Projects/Contexts:** [[도메인 기반 설계(DDD)]], [[Effect TS]]
- **Contradictions/Notes:** TypeScript 커뮤니티에서 명목적(비구조적) 타입 매칭을 네이티브로 지원하는 것에 대한 논의가 2014년부터 꾸준히 있었으나 아직 완전한 합의나 내장 기능이 추가되지는 않았으며, 대신 개발자들은 고유 심볼(unique symbol)이나 런타임 유효성 검사(Zod 등)를 결합하여 이를 우회적으로 달성하고 있습니다 [3, 13, 14].
---
*Last updated: 2026-04-18*
---
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
**언제 이 지식을 쓰는가:**
- *(TODO)*
**언제 쓰면 안 되는가:**
- *(TODO)*
## 🧪 검증 상태 (Validation)
- **정보 상태:** needs_review
- **출처 신뢰도:** A
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
## 🧬 중복 검사 (Duplicate Check)
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
- **처리 방식:** UPDATE (자동 정규화)
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
## 🕓 변경 이력 (Changelog)
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|------|-----------|-----------|--------|
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
## 💻 코드 패턴 (Code Patterns)
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
```text
# TODO
```
## 🤔 의사결정 기준 (Decision Criteria)
**선택 A를 써야 할 때:**
- *(TODO)*
**선택 B를 써야 할 때:**
- *(TODO)*
**기본값:**
> *(TODO)*
## ❌ 안티패턴 (Anti-Patterns)
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
## 🕓 변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |