2026-07-06 (일)
학습 주제
- 📄 Primary Associated Type & Generic Q&A — Swift 5.7+ PAT 문법 정리
- Primary Associated Type:
protocol Container<Item>문법 (Swift 5.7+) - 제네릭 아님:
<Int>는 타입 파라미터가 아니라 Associated Type 지정 - any 필수 여부: 5.6 OK → 5.7 경고 → 6.0+ 에러
- Generic 함수가 아는 것: 프로토콜 인터페이스 전부 / 모르는 것: Associated Type 구체 타입
- where 절:
where T.Item == Int있으면 Int로 사용 가능, 없으면 T.Item으로만 추상 사용 - Dispatch: any=Dynamic, some/Generic=Static
- any는 프로토콜 전용: struct/class 제네릭에는 any 못 붙임
- Primary Associated Type:
오답노트 — PAT vs Generic
- 착각: "Container<Int>의 <Int>도 제네릭 아닌가?" → 정정: 생김새는 같지만 역할이 다름. 제네릭=타입 파라미터, PAT=Associated Type 지정
- 착각: "Generic 함수는 c의 내부를 모른다" → 정정: 프로토콜 인터페이스는 다 안다. 모르는 건 Associated Type의 구체 타입뿐
escaping vs non-escaping 메모리
- 📄 클로저 메모리 위치 — escaping/non-escaping 차이
- escaping: 클로저 자체 + 캡처 변수 = 힙
- non-escaping: 클로저 + 캡처 변수 = 스택 가능
- 내부 지역변수: escaping이든 non-escaping이든 실행 시 스택
PC · FP · SP 레지스터
- 📄 스택 프레임과 레지스터 — PC/FP/SP 동작 원리
- PC: 현재 실행할 명령어 주소 (매 명령어마다 변경)
- FP: 현재 프레임 기준점 (함수 진입/복귀 시만 변경)
- SP: 스택 최상단 (push/pop마다 변경)
- return addr: 어느 코드로 돌아갈지 (call이 push)
- saved FP: 어느 프레임으로 돌아갈지 (함수 진입 시 push)
- FP 체인: add → main → 런타임 (linked list처럼 연결, Call Stack 추적 원리)
캡처 변수와 ARC 동작
- 📄 클로저 캡처와 ARC — refCount 변화 단계별 설명
- Box: 캡처 변수를 담는 힙 객체, ARC로 관리
- 클로저 생성 시: Box refCount = 2 (원본 변수 + 클로저)
- 함수 종료 시: 원본 변수 소멸 → refCount = 1
- 클로저 실행 시: Box 내부 값 변경 (refCount 불변)
- 클로저 scope 종료 시: refCount = 0 → Box 해제
Capture List와 참조 타입
- 📄 캡처 리스트가 고정하는 것 — 참조 vs 인스턴스
- [box]: 참조(주소)를 고정 — 인스턴스 자체가 아님
- 내부 변경(box.value = 99): 공유됨 (같은 인스턴스니까)
- 변수 재할당(box = Box()): 분리됨 (주소가 달라짐)
- 완전 독립:
[snap = box.value]처럼 값 직접 캡처
✅ 정리 완료: any/some/Generic/PAT + escaping 메모리 + PC/FP/SP 레지스터 + ARC 동작 + Capture List