2026-07-03 (목)
학습 주제
- 📄 Clean Architecture 보충 Q&A — UseCase Interface, DI Container, Coordinator
- UseCase Interface: UseCase도 Protocol로 정의 가능 → ViewModel에서 Mock 주입으로 테스트 용이
- DI Container: 앱 시작 시 모든 의존성(UseCase, Repository 등) 조립 & 주입
- 의존성 방향: UI → Domain ← Data. Domain은 아무것도 의존 안 함 (순수 Swift)
- Coordinator: 화면 전환 담당. ViewModel은 UIKit 모름 (Action 클로저만 호출)
- 전체 그림: Application(DI) → Presentation(View/VM/Coordinator) → Domain(Entity/UseCase/RepoInterface) → Data(RepoImpl/DTO) → Infrastructure(API/DB)
Scene 계층 구조 심화
- 📄 Scene 계층 구조 Q&A — UIWindowScene, UIWindow 관계 정리
- 전체 계층: UIApplication → UISceneSession ↔ UIWindowScene ← UIWindow → rootViewController
- 참조 방향: UIWindow가 UIWindowScene을 strong 참조 (반대 아님)
- UIWindowScene.windows: 역방향 조회 (weak 추정), Scene이 Window를 "소유"하는 게 아님
- Window:Scene 관계: N:1 (여러 Window가 같은 Scene 참조 가능 - main, keyboard, alert)
- UIScene vs UIWindowScene: UIScene은 windows 없음 (추상), UIWindowScene에만 있음
- SceneDelegate 생명주기: willConnectTo → didBecomeActive → willResignActive → didEnterBackground → sceneDidDisconnect
- Coordinator 패턴: SceneDelegate가 Window 소유, Coordinator가 rootVC 설정/화면 흐름 관리
오답노트 — Scene 계층
- 착각: "UIWindowScene이 UIWindow를 소유한다" → 정정: UIWindow가 UIWindowScene을 strong 참조. Scene.windows는 조회용
- 착각: "Scene이 Window 안에 있다" → 정정: Window가 Scene에 "소속"되는 것 (Scene = 화면 환경, Window = 그 위의 창)
- 착각: "UIScene에 windows가 있다" → 정정: UIScene(추상)엔 없고, UIWindowScene(구체)에만 있음
✅ 정리 완료: Clean Architecture + Scene 계층 구조 전체 이해