iOS 앱 개발: 기획부터 도메인까지

낯선 언어를 매일 학습하며 몰입과 성장을 기록하는 일지

  ·  3 min read

오늘의 포커스 #

  • 미션 주제 선정
  • CLI 콘솔과 모바일 UX의 차이 알아보기
  • iOS 앱 화면 플로우 설계
  • 도메인 모델 설계 과정

미션 주제 선정 #

처음 오픈 미션을 받고 항상 사용하지만 도전이 될 수 있는 새로운 언어를 선택하여 기존의 미션을 수행해보고 싶었습니다. 특히 백엔드가 아닌 프론트나 모바일에 대해서 지식이 부족하여 이번 도전이 의미 있는 프로젝트가 될 수 있을것이라 예상했기 때문입니다. 많은 언어 중 Swift를 통해 처음 iOS 앱을 만들어 보는 것을 목표로 정하고 주제를 선정하는 과정에서 여러 고민들이 있었습니다. 주제를 고민하면서 최대한 기존 주제들을 잘 활용하여 적어도 작동하는 프로젝트로 완료하고 싶어 1,2,3주차 미션 중 3주차 미션을 선택하였습니다. 로또의 경우 가족 구성원들 모두 한번씩은 구매해본 경험이 있고, 아직 중장년층은 오프라인으로 많은 구매를 하여 iOS를 이용해 오프라인 구매에 익숙한 연령대도 편하게 쓸 수 있는 앱을 만들고 싶었기 때문입니다.

CLI 콘솔과 모바일 UX의 차이 #


콘솔 #

  • 텍스트 기반 명령어를 통해 순차적으로 상호작용
  • 키보드로 명령을 입력
  • 시나리오대로 질답을 지나가며 되돌리기는 불가함

모바일 #

  • 터치스크린은 HCI의 전환점1
  • 키패드를 완전히 대체
  • 실수를 방지하는 시스템을 디자인, 실수로 인한 재앙적 결과를 피해야함2
    • 제약 $\rightarrow$ 실시간 검증 $\rightarrow$ 버튼 비활성화

앱 플로우 설계 #

Swift 기본 구조 #

Model #

  • LottoResult
  • LottoTicekt
  • LottoMachine

ViewModel #

  • LottoViewModel

View #

  • PurchaserView
    • LottoListView
    • WinningInputView
    • ResultView

도메인 모델 설계 과정 #

도메인 모델 설계 과정은 AI를 적극적으로 활용하여 빠르게 프로젝트의 기틀을 잡고자 하였습니다. 아래는 Claude Sonnet 4.5 Model과의 대화를 요약하였습니다.

질문 #

"우테코 로또 미션을 iOS로 만들려고 해. 콘솔에서는 순차적으로 입력받았는데, iOS에서는 어떤 화면 구조로 만들어야 할까? - 필요한 화면(View) 개수 - 화면 간 이동 방법 - 데이터 전달 방법을 쉽게 설명해줘."

답변 #

필요한 화면 #

  • 필요한 화면은 총 4개
    • PurchaseView
    • LottoListView
    • WinningInputView
    • ResultView
  • 콘솔의 한 줄씩 나오는 질문을 모두 한 개의 화묜으로 만들어 사용자를 이동시킴

화면 이동 #

  • NavigationSTack을 통해 화면 이동
NavigationStack {
    PurchaseView()
        .navigationDestination(isPresented: $showLottoList) {
            LottoListView()
        }
}
  • 자동 뒤로가기 버튼
  • 스와이프로 이전 화면
  • iOS 사용자에게 익숙한 패턴

데이터 전달 #

  • ViewModel을 통해 데이터 전달
// 모든 화면이 공유하는 단일 상태
class LottoViewModel: ObservableObject {
    @Published var purchaseAmount: Int = 0
    @Published var lottos: [Lotto] = []
    @Published var winningNumbers: [Int] = []
    @Published var result: LottoResult?
}

// 모든 View에서 접근
struct PurchaseView: View {
    @StateObject var viewModel = LottoViewModel()
    // 다음 화면으로 viewModel 전달
}

문제와 돌파 #

  • View Protocol에 대한 개념이 모호하여 Apple 공식 페이지를 통해 학습3
  • NavigationStack에 대한 공식 페이지를 통해 학습4

필요한 학습 #

  • Swift 기본 문법 학습
  • Protocol 기본 개념에 대한 추가 학습
  • Optional과 Closure 학습
  • Published Wrapper 학습
  • StateObject Wrapper 학습

Reference #


  1. Punchoojit, Lumpapun, Hongwarittorrn, Nuttanont, Usability Studies on Mobile User Interface Design Patterns: A Systematic Literature Review, Advances in Human-Computer Interaction, 2017, 6787504, 22 pages, 2017. https://doi.org/10.1155/2017/6787504 ↩︎

  2. https://www.smashingmagazine.com/2022/02/touch-design-release/ ↩︎

  3. https://developer.apple.com/documentation/swiftui/view ↩︎

  4. https://developer.apple.com/documentation/SwiftUI/NavigationStack ↩︎