Home

Aggregate Model (2)

중첩된 Observable 객체의 한계와 Observation 프레임워크의 해결 과거 ObservableObject 기반의 중첩 구조에서 발생하던 UI 새로고침 버그를 분석하고, 최신 @Observable 매크로가 이를 어떻게 개선하는지 정리한다. 1. 중첩된 Observable 구조 분석 (과거 방식) 강좌에서는 예시로 ExpenseTracker(최상위 스토어) 내부에 Expenses(하위 스토어)라는 또 다른 ObservableObject가 포함된 구조를 보여준다. class ExpenseTracker: ObservableObject { @Published var name: String @P...

Read more

Aggregate Model (1)

Aggregate Model: Bounded Context를 활용한 대규모 앱 설계 단순히 화면마다 뷰모델을 만드는 방식에서 벗어나, 앱의 규모에 따라 데이터 원천을 어떻게 논리적으로 격리하고 관리할 것인지에 대한 아키텍처적 가이드라인을 정리한다. 1. 단일 모델 구조 (Small to Medium Apps) 앱이 작거나 중간 규모일 때는 하나의 거대한 모델이 전체 상태를 관리할 수 있다. Apple의 Food Truck샘플 앱이 대표적인 사례이다. @MainActor public class FoodTruckModel: ObservableObject { @Published public var truck...

Read more

프로젝트를 통한 MVVM 분석

커피 주문 앱의 기존 MVVM 코드 분석 강의에서 제공된 프로젝트(커피주문앱)는 기능을 수행하는 데 문제가 없으나, 레이어 간의 강한 결합과 반복적인 의존성 주입이 구조적 복잡성을 야기함. 리팩토링 전의 핵심 로직들을 정리함. 1. ViewModel의 구조적 복잡성 각 View는 고유한 ViewModel을 가지며, 모든 통신 로직이 이 계층에 갇혀 있음. struct CoffeeOrderListScreen: View { let coffeeOrderListVM: CoffeeOrderListViewModel @State private var isPresented: Bool = false ...

Read more

MVVM in SwiftUI - Origin to Limitations

MVVM의 기원: Presentation Model (by Martin Fowler) 많은 개발자가 MVVM을 마이크로소프트가 WPF를 위해 만든 최신 패턴으로 알고 있지만, 그 뿌리는 2004년 마틴 파울러가 제안한 ‘Presentation Model’에 있다. 이 개념을 이해하면 SwiftUI가 왜 지금의 형태가 되었는지 더 명확해진다. 1. MVVM은 사실 ‘Presentation Model’의 마케팅 용어다 역사적 배경: 2004년 당시에는 iOS도 없었고, 마틴 파울러는 Windows Forms를 예로 들어 이 패턴을 설명했다. 용어의 변화: 이후 마이크로소프트가 WPF를 내놓으면서 이 패턴을...

Read more

HP Trivia (12)

SelectBooksView에서 VM 연결하기 실제 결제 기능을 연결하기에 앞서, 기존에 임시로 사용했던 시뮬레이션용 로직들을 정리한다. LockedBookView(book: book) .onTapGesture { showTempAlert.toggle() // 제거 game.bookQuestions.changeStatus(of: book.id, to: .active) // 제거 } .alert("You purchased a new question pack. Yay!", isPresented: $showTempAlert) { // 제거 } ...

Read more

HP Trivia (11)

In-App 결제 기능 구현 개발자 멤버십을 새롭게 연장한 기념으로, 중단되었던 강의 내용을 다시 정리한다. 인앱 결제(IAP) 기능을 구현하기 위해서는 Apple 개발자 멤버십 가입이 필수적이다. 결제 기능을 구현할 때 핵심이 되는 프레임워크는 StoreKit이다. StoreKit Docs 참고 StoreKit 한글 설명 참고 1. StoreKit Configuration File 생성 실제 App Store Connect에 상품을 등록하기 전, 로컬 환경에서 결제 테스트를 진행하기 위해 설정 파일을 만든다. Next를 누르면 나타나는 팀 설정 창은 지금 단계에서는 체크하지 않고 넘어...

Read more

Mastering the iOS App Launch Process- 6 Key Phases

강의에 있던 내용을 정리한다. 📱 6 Key Phases of iOS App Development 💡 Phase 1 - Ideation 앱 아이디어 선정: 본인의 페인 포인트(Pain Points)에서 아이디어를 찾는다. 즉시 기록: 아이디어가 떠오르는 즉시 기록하여 보존한다. 🧠 Phase 2 - Brainstorm 기능 정의: 앱이 수행할 핵심 기능을 정의한다. 화면 구상: 필요한 화면들의 예비 리스트를 작성한다. MVP 설정: 출시 전 반드시 필요한 단 하나의 핵심 기능에 집중한다. 현실적인 목표를 세워 번아웃을 방지한다. 수익화 전략: 유료, 무료, 구독, 인앱 결제, 광고 ...

Read more

HP Trivia (10)

Next Level 버튼 애니메이션 추가 시작하기 앞서 Next Level 버튼에 phaeAnimator를 사용하여 약간의 생동감을 부여해주었다. .phaseAnimator([false, true]) { content, phase in content .scaleEffect(phase ? 1.2 : 1) } 이렇게 버튼이 바운스바운스 하게된다. .phaseAnimator([false, true]) { content, phase in content .scaleEffect(phase ? 1.2 : 1) } animation: { _ in .easeIn...

Read more