Swift 타입 시스템¶
이 페이지는 Swift 타입 시스템을 상위 레벨에서 묶는 허브다. 제네릭, conformances, archetype, literals, dynamic casting, existentials는 따로 보면 흩어져 보이지만, 실제로는 하나의 타입 시스템 이야기 안에서 맞물린다.
Swift 타입 시스템을 이루는 큰 축¶
| 축 | 핵심 질문 | 연결 페이지 |
|---|---|---|
| 기본 타입 모델 | 값 타입과 참조 타입은 어떻게 구분되는가 | Swift 소유권·메모리 모델, Value/Reference Types → SIL 소유권 교차 읽기, 동적 캐스팅 동작, Swift 런타임 |
| 추론과 제약 | 타입은 어떻게 추론되고 오버로드는 어떻게 선택되는가 | 타입 체커 설계 및 구현, 리터럴의 타입 체킹과 추론, 진단 시스템 (Diagnostics) |
| 제네릭 | 파라미터화된 타입/함수는 어떻게 의미를 갖는가 | Compiling Swift Generics, Generic Signatures, Substitution Maps |
| 프로토콜 | conformance와 associated type은 어떻게 다뤄지는가 | Conformances, Archetypes, 제네릭 매니페스토 |
| existential / opaque | any와 some은 어떤 추상화 경계를 가지는가 |
Archetypes, 동적 캐스팅 동작, Generics Manifesto 해설 |
| ABI / runtime 연결 | 타입은 메모리와 바이너리에서 어떻게 표현되는가 | ABI: 타입 메타데이터, ABI: 타입 레이아웃, ABI: 제네릭 시그니처, Swift 런타임 |
왜 Swift 타입 시스템이 중요한가¶
Swift의 많은 특징은 사실상 타입 시스템 이야기다.
- 제네릭과 프로토콜 중심 설계
- 값 의미론과 copy-on-write
- literal defaulting과 contextual typing
some/any/ metatype / associated type- concurrency에서의
Sendable
즉 Swift를 깊게 이해한다는 것은 상당 부분 Swift 타입 시스템을 이해한다는 뜻과 겹친다.
컴파일러 관점에서는 어떻게 보이나¶
1. Parser 이후 Sema의 중심 문제¶
타입 시스템은 파서가 아니라 의미 분석 단계에서 본격적으로 드러난다. 표현식, 선언, 제네릭 제약, 오버로드 후보가 모두 제약 시스템 문제로 모인다.
관련 페이지: - 타입 체커 설계 및 구현 - Request Evaluator - 진단 시스템 (Diagnostics)
2. Generic signature와 conformance 모델¶
Swift 타입 시스템의 고유한 난이도는 제네릭 + 프로토콜 + associated type 결합에서 크게 나온다. 여기서 generic signature, substitution map, archetype, conformance lookup이 핵심 도구가 된다.
관련 페이지: - Generic Signatures - Substitution Maps - Archetypes - Conformances
3. 타입 시스템과 ABI/runtime의 접점¶
타입은 단순한 정적 검사 대상이 아니다. 메타데이터, 레이아웃, calling convention, existential container, witness table 같은 런타임/ABI 구조와 직접 이어진다.
관련 페이지: - ABI: 타입 메타데이터 - ABI: 타입 레이아웃 - ABI: 호출 규약 - Swift 런타임
Swift 타입 시스템에서 자주 헷갈리는 쌍¶
- nominal type vs structural type
- interface type vs contextual type
- generic parameter vs archetype
- existential vs opaque type
- static type vs runtime type
- source-level type vs lowered SIL type
이런 구분은 세부 페이지에 흩어져 있기 때문에, 이 허브를 기준으로 필요한 쪽으로 내려가면 덜 헤맨다.