← Study Hub

Swift & Foundation 로드맵

언어 기초부터 Foundation 프레임워크, 그리고 저수준 메모리와 Swift 6.3까지 — 원리 → 내부 동작 → 재현·측정으로 잇는 면접·실무 166문항
진행률
0 / 0 완료
이 강의는 Swift 언어Foundation 프레임워크를 "문법을 아는가"가 아니라 "컴파일러와 런타임이 실제로 무엇을 하는가"로 다시 읽습니다. 166개 문항 각각을 원리에서 내부 동작까지 내려가고, 마지막엔 직접 돌려서 확인하는 방법으로 닫습니다. 본문의 수치·동작은 대부분 Swift 6.2.1 / macOS 26에서 직접 컴파일·실행해 확인한 실측값입니다.
📝 Part C 추가 (29~33장)

Part C는 그 아래층 — 메모리를 직접 만지는 층과 최근 두 릴리스가 얹은 것들입니다. 배타적 접근이 릴리스 빌드에서 어떻게 죽는지, Span이 어떤 구멍을 컴파일 에러로 바꿨는지, NaN 하나가 sorted()를 어떻게 무력화하는지, 그리고 열 토큰짜리 한 줄이 왜 컴파일에 실패하는지를 전부 재현해 확인합니다. 단, 33장(Swift 6.3)만은 로컬 6.2.1로 실측이 불가능해 스펙 기준으로 쓰고 문항마다 미실측 배지를 붙였습니다.

이 강의를 읽는 법

문항마다 아래 순서로 정리했다. 30초 답변만 먼저 훑어 전체 지도를 잡고, 헷갈리는 문항만 아래로 파고들면 된다. 각 문항이 진행 체크포인트라 다 못 봐도 이어서 볼 수 있다.

🔑 30초 답변
면접·동료 설명에 그대로 쓰는 핵심 3~5문장.
원리
스펙과 제안서가 무엇을 어떻게 정의하는가.
내부 동작
컴파일러·런타임·stdlib·swift-foundation이 실제로 하는 일. 메모리 레이아웃과 수치까지.
실험 · 도구
MemoryLayout·SIL·LLDB·Instruments로 직접 증명하는 법.
프로젝트 적용
"그래서 우리 코드에서 무엇을 해야 하나"와 trade-off.
⚠️ 흔한 오해 / 🧒 쉽게 이해하기
잘못 알려진 설명 교정, 그리고 12살에게 하듯 다시 한 번.
🔑 핵심

목표는 API 암기가 아니라, 처음 보는 Swift·Foundation 동작도 원리 → 가설 → 측정 → 결론 순서로 스스로 설명할 수 있게 되는 것이다.

다른 강의와의 관계

이 사이트의 다른 강의와 주제가 일부 겹친다. 지우지 않고 관점을 나눴다. 같은 개념이라도 여기서는 "언어·API 자체가 어떻게 동작하는가"를, 저기서는 "그 개념이 iOS에서 어떤 현상으로 보이는가"를 다룬다. 겹치는 대목에는 본문에서 서로 링크를 걸어두었다.

주제이 강의다른 강의
ARC · 캡처클로저 컨텍스트가 힙에 무엇을 만드는가 (06장)iOS CS 01 · 메모리 — 메모리 압박·Jetsam
struct/class · some/any메모리 레이아웃·실존 컨테이너·디스패치 (01·07·08장)iOS CS 05 · Swift 런타임 — 개괄
actor · Sendable참조 타입으로서의 actor, Foundation의 Sendable 대응 (01·17장)Swift Concurrency 면접 10선
RunLoop · TimerTimer가 RunLoop 모드에 묶이는 이유 (28장)iOS CS 07 · RunLoop — 이벤트 루프 전체

Part A · Swift 언어

언어가 약속하는 의미론과, 컴파일러가 그 약속을 지키려고 실제로 만들어내는 코드 사이의 간격을 좁힌다. 13챕터 · 69문항.

01 · 값 타입과 참조 타입 6문항
CoW의 실제 트리거 시점, size/stride/alignment, 필드 순서가 크기를 바꾸는 이유.
02 · 초기화와 생명주기 5문항
2단계 초기화 4규칙, extension init 제약, static let은 안전하고 lazy var는 아닌 이유.
03 · 옵셔널 5문항
Int?는 9바이트인데 String?은 오버헤드 0인 이유 — spare bit과 extra inhabitant.
04 · 에러 처리 6문항
스택 언와인딩 대신 전용 레지스터를 쓰는 throws ABI, typed throws, defer의 함정.
05 · 프로퍼티 5문항
init에서 didSet이 안 불리는 이유, inout이 항상 부르는 이유, 프로퍼티 래퍼 desugaring.
06 · 클로저와 캡처 6문항
escaping이 힙 박스를 잡는 지점, 그리고 [weak self]가 필요 없는 경우를 가르는 규칙.
07 · 프로토콜과 디스패치 5문항
vtable·witness table·msgSend의 차이, 그리고 extension 기본 구현이 오버라이드되지 않는 이유.
08 · 제네릭과 some·any 6문항
실존 컨테이너 3워드와 박싱 기준, 역제네릭, SE-0309가 풀어준 것.
09 · 열거형과 패턴 매칭 4문항
연관값의 메모리 표현, indirect, 망라성 검사와 @unknown default.
10 · 컬렉션과 해싱 5문항
amortized O(1)이 깨지는 조건, SipHash 시딩 때문에 순회 순서가 매번 달라지는 이유.
11 · Sequence·Collection과 lazy 5문항
계층별 복잡도 계약, lazy의 배신, Slice가 버퍼를 붙잡는 함정, sort 안정성의 역사.
12 · String과 유니코드 6문항
count가 O(n)인 이유, 15바이트 인라인 저장, 정규 동치, 가족 이모지, Turkish-I.
13 · 접근제어·ABI·매크로 5문항
package가 필요했던 이유, @frozen의 대가, 매크로 확장, borrowing·consuming·~Copyable.

Part B · Foundation

NeXTSTEP에서 온 40년짜리 유산이 순수 Swift로 다시 쓰이는 중이다. 그 프레임워크가 무엇이고, 어디가 바뀌었고, 무엇이 여전히 사람을 물어뜯는지. 15챕터 · 72문항.

14 · Foundation이란 무엇인가 5문항
NS 접두사의 유래, corelibs, swift-foundation 재작성 4년 타임라인과 공개된 성능 수치.
15 · 모듈 분할과 크로스플랫폼 4문항
Essentials/Internationalization의 경계, "가벼워진다"가 대체로 틀린 이유, Linux·Windows 현황.
16 · ObjC 브리징과 NSObject 5문항
Array→NSArray가 지연 래퍼를 만드는 실제 비용, @objc만으론 KVO가 조용히 실패하는 이유.
17 · Foundation과 Swift 6 동시성 4문항
컴파일러에게 직접 물어 만든 Sendable 표, @unchecked를 상속 계층에 붙이는 위험.
18 · Data와 바이트 5문항
500MB를 읽으면 앱이 죽는 이유와 .mappedIfSafe, discontiguous Data의 함정.
19 · Codable ① 합성과 커스텀 5문항
합성이 깨지는 조건, 컨테이너 3종, superEncoder 없이 키가 덮어써지는 실제 재현.
20 · Codable ② 전략·진단·성능 5문항
convertFromSnakeCase가 무손실이 아닌 이유, codingPath로 범인 찾기, 재작성 전후 성능.
21 · URL과 URLComponents 5문항
RFC 3986, + 기호 문제, path/relativePath/absoluteString, URLResourceValues.
22 · Date·Calendar·TimeZone 5문항
Date에 타임존이 없다는 말의 의미, DST에서 86400초 산술이 깨지는 지점, 윤초.
23 · 포매팅 5문항
YYYY 새해 버그, en_US_POSIX, FormatStyle, 그리고 Double 연산을 거친 값을 Decimal로 감싸는 함정.
24 · 국제화 4문항
Locale.Language와 Region 분리, String Catalog, CLDR 복수 규칙, 한글 정렬.
25 · FileManager와 파일 I/O 5문항
디렉터리별 백업·퍼지 규칙, atomic 쓰기가 리소스 값을 리셋하는 실측, Data Protection.
26 · UserDefaults와 저장소 선택 4문항
등록 도메인, synchronize() 반환 후에도 디스크는 그대로라는 실측, App Group.
27 · 옵저버 — NotificationCenter·KVO·Observation 5문항
post는 동기다, 블록 옵저버 누수, isa-swizzling, iOS 26 타입 메시지, @Observable.
28 · 시스템 유틸 — NSCache·Timer·Operation·Predicate 6문항
countLimit이 엄격하지 않은 이유, 스크롤이 Timer를 멈추는 이유, Predicate와 Regex.

Part C · 저수준 메모리와 최신 언어 기능

언어가 안전을 어떻게 지켜왔고, 지키지 못한 곳을 최근 두 릴리스가 어떻게 메웠는가. 같은 위반이 컴파일 에러 · SIGABRT · 조용한 통과로 갈리는 경계를 종료 코드까지 재현해 가른다. 5챕터 · 25문항.

출처 · 참고자료