UIKit으로 몇 년 일한 사람이 SwiftUI에서 막히는 곳은 문법이 아니다.
VStack과 Text는 30분이면 쓴다.
막히는 건 "뷰를 붙잡고 시킨다"는 사고방식이다. 그게 남아 있으면 몇 달 뒤에도
"상태가 왜 초기화되지", "frame이 왜 안 먹지", "왜 이렇게 느리지"에서 멈춘다.
이 코스는 하루 한 주제, 14일 동안 그 사고방식을 바꾸고, 그 위에 실무 화면을 끝까지 만드는 도구를 쌓는다. 출시에 필요한 부품은 부록 2편에 따로 모았다.
하루를 이렇게 쓴다
하루에 한 주제를 끝낸다. 한 챕터는 30분 안에 읽히게 썼고, 내용이 큰 주제(Day 3·4·5·7·8·9·10·11·12·13·14)는 압축하지 않고 1부·2부 두 챕터로 나눴다. 두 부를 이어서 읽어도 되고, 아침·저녁으로 나눠 읽어도 된다. 아래는 챕터 하나(30분)의 구성이다.
🔮 코드 예측 문항
매일 "이 코드에서 무엇이 출력되나 / 상태가 유지되나"를 먼저 답하고 펼친다. 개념을 알아보는 것과 코드로 예측하는 것은 다른 능력이다.
🔁 지난 Day 복습
복습 박스 마지막 문항은 앞 내용을 다시 묻는다 — 1부(와 단일 챕터)는 지난 Day, 2부는 같은 Day의 1부. 잊어버릴 즈음 한 번 더 꺼내 보는 간격 반복이다.
🛠 미니 과제
Xcode Preview 하나로 끝나는 독립 과제. 그날의 마지막 챕터(단일 챕터 또는 2부)에 있다. 전날 과제가 없어도 된다. 정답 코드는 접혀 있다.
✔︎ 섹션 체크
섹션 제목 옆 체크박스로 진행률이 챕터별로 저장된다. 1부만 읽고 멈춰도 다음에 이어진다.
14일 지도
| 단계 | 끝나면 할 수 있는 것 |
|---|---|
| 1 · 머릿속 모델 (Day 1–5) | 화면을 "상태의 함수"로 설계하고, 상태를 어디에 둘지 결정 트리로 고르고, 상태가 사라지는 버그를 identity로 설명한다. |
| 2 · 실무 연결 (Day 6–8) | 회사 UIKit 앱에 SwiftUI 화면·셀을 끼워 넣고, 레이아웃이 의도대로 안 잡히는 이유를 제안/결정으로 진단한다. |
| 3 · 화면 만들기 (Day 9–11) | 긴 목록을 성능 문제 없이 그리고, 데이터 기반 내비게이션과 딥링크를 짜고, 폼 입력·포커스·검증을 처리한다. |
| 4 · 앱 완성 (Day 12–14) | .task로 로딩·취소를 다루고, SwiftData로 저장하고, 테스트 가능한 모델을 만들고, 애니메이션을 원하는 대로 제어한다. |
Day 목록
Day 1 · 선언형으로 머리 바꾸기 약 30분
명령형→선언형 전환, body는 반복 호출되는 설명서, 모디파이어는 감싸기
Day 2 · 뷰 조립 약 30분
서브뷰 쪼개기 기준, @ViewBuilder 컨테이너, ViewModifier, ButtonStyle
Day 3 · 상태 ① 진실은 한 곳 1부·2부 · 약 44분
Day 4 · identity와 lifetime 1부·2부 · 약 44분
Day 5 · 상태 ② Observation 1부·2부 · 약 46분
Day 6 · UIKit과 함께 살기 약 30분
호스팅 컨트롤러·셀 구성·Representable로 UIKit 앱에 SwiftUI 점진 도입
Day 7 · 레이아웃 ① 3단계 협상 1부·2부 · 약 43분
Day 8 · 레이아웃 ② 도구 상자 1부·2부 · 약 44분
Day 9 · 리스트·스크롤 + 성능 1부·2부 · 약 48분
Day 10 · 내비게이션 1부·2부 · 약 38분
Day 11 · 입력·폼·포커스 1부·2부 · 약 42분
Day 12 · 동시성 1부·2부 · 약 48분
Day 13 · 데이터·앱 구조 1부·2부 · 약 41분
Day 14 · 애니메이션·Transaction·제스처 + 총정리 1부·2부 · 약 48분
부록 — 필요할 때 펴 보는 실무 부품
14일이 원리라면 부록은 부품이다. 화면을 실제로 출시하려면 매일 부딪히는 것들 — 원격 이미지, 툴바·메뉴, 현지화, 다크 모드, 접근성 심화, AppDelegate 연결 — 을 모았다. 순서 없이 필요한 것부터 읽어도 된다. 부록도 한 편에 30분이다.
부록 A · 매일 쓰는 부품 약 30분
Image 순서 규칙·SF Symbols, AsyncImage phase, 툴바·메뉴, 공유·햅틱
부록 B · 출시 가능한 앱 약 30분
현지화·다크 모드·Dynamic Type·접근성·AppDelegate 연결까지 출시 전 점검
이 코스를 읽는 법
- 출처는 Apple 것만 쓴다. WWDC 세션(자막 원문)과 developer.apple.com 문서만 인용한다. SwiftUI는 iOS 17 Observation 도입으로 정답이 한 번 크게 바뀌었고, 검색 상위에는 아직 낡은 조언이 많다.
- 기준은 iOS 17+. iOS 18·26 전용 API에는 iOS 18+ 같은 배지를 붙이고 따로 떼어 둔다.
- UIKit 경험을 전제하고 매 섹션 UIKit과 나란히 놓는다.
- 순서대로 읽는다. Day 4는 Day 3의
@State를, Day 9의 성능은 Day 4·5의 identity·의존성을 전제로 쓰였다.
🔑 시간이 부족하면
Day 1·3·4·5만 먼저 읽는다(Day 4는 2부 1절 lifetime까지가 뼈대다). 나머지는 이 네 개 위에 얹히는 도구다. 반대로 나머지만 읽으면 "외운 API"만 남는다.
다른 강의와의 관계
| 주제 | 여기서 다루는 정도 | 더 깊게 |
|---|---|---|
async/await · actor · Sendable | SwiftUI에서 쓰는 만큼 (Day 12) | Swift Concurrency |
| Swift 언어 · 값/참조 타입 | 전제로 두고 넘어감 | Swift & Foundation 로드맵 |
| 테스트 전략 전반 | @Observable 모델 테스트까지 (Day 13) | 소프트웨어 테스트 |
| TCA · 모듈화 · 면접 | 다루지 않음 | iOS 기술면접 — 모던 스택 5종 |
📝 다루지 않는 것
visionOS·macOS·watchOS 전용 내용, Canvas·Metal 셰이더 같은 그리기 세부, iPad 전용 NavigationSplitView 심화, WidgetKit. iPhone 앱 실무에 먼저 필요한 것에 14일을 쓰기 위해 뺐다.