MVC 패턴을 적용한 실습용 프로젝트입니다. storyboard 를 활용하여 화면을 구성하고, 이를 실제 코드와 연동하는 과정을 학습했습니다.
- 타입의 캡슐화/은닉화
- 내비게이션 바 및 버튼 아이템의 활용
- 얼럿 컨트롤러 활용
- Modality의 활용
- 화면 사이의 데이터 공유
- 오토레이아웃 적용해보기
- Protocol / Extension 활용
- MVC 패턴의 이해
JuiceMaker.swift
- enum Menu : 과일쥬스의 종류, recipe property는 쥬스 제작에 필요한 과일 수량 명시
- makeJuice() : fruitStore 싱글턴 객체에 과일 재고 소비를 요청
FruitStore.swift
- enum Fruit : 과일의 종류
- enum StorageError : 재고부족에러
- storage : 과일 재고 딕셔너리
- updateStock() : 재고 변경
- consume() : 재고 소비 메서드, 재고가 부족한 경우 에러 출력
- setUpInitialFruitsStock() : 초기화 시 storage 에 과일 재고 수량을 10만큼 할당
Main.storyboard
- 쥬스 주문 화면 : 과일의 현재 재고 및 주문 버튼 출력, 재고수정 버튼을 클릭해 재고수정 화면으로 이동
- 재고 추가 화면 : 과일의 재고 수량을 변경, 닫기 버튼으로 쥬스 주문 화면으로 이동
FruitJuiceOrderViewController.swift
- presentStockViewController() : 재고 추가 화면으로 이동하는 로직, 위임패턴을 활용해 reloadFruitsCount() 기능 위임
- orderJuice() : juiceMaker 객체에 makeJuice() 요청, 성공한 경우 쥬스 수령 alert, 재고가 모자란 경우 재고추가 화면 이동 여부 alert
- reloadFruitsCount() : 화면의 label 값을 현재 재고 수량으로 연동
- alertJuiceServed() : 쥬스 수령 alert
- alertInsufficientStock() : 재고 수정 alert, '예' 선택 시 재고 수정 화면으로 이동
- stockViewWillDisappear() : delegate 패턴 활용하여 reloadFruitsCount() 위임
- 그 외 과일 재고 Label, 과일쥬스 주문 버튼에 연동된 @IBOutlet, @IBAction
StockViewController.swift
- updateStock() : 재고 변경 요청 및 화면 반영
- reloadFruitsCount() : 재고 수량 화면 반영
- setInitialStepperValues() : 스테퍼의 초기값을 재고 수량과 연동
- 그 외 과일 재고 Label, Stepper 와 연동된 @IBOutlet, @IBAction
UIViewController의 메서드로 관리되는 view의 생명주기
- viewIsAppearing() : view가 onscreen 에 나타날 때 콘텐츠의 변화를 view에 반영하려면 이 메서드에 적용. 공식문서는 viewWillAppear() 대신 viewIsAppearing() 활용을 권장 참고문서 링크
Delegate(위임) 패턴
- 프로토콜을 활용하여 위임 패턴 구현 가능
- 프로토콜을 타입으로 활용하여 전달하기 때문에 프로토콜에서 요구하는 내용만 위임할 수 있음
storyboard의 view와 viewController 와 연동하고, auto layout 을 활용해 반응성있는 화면을 구현해볼 수 있었습니다. 또한 이 과정에서 내비게이션과 모달을 활용한 화면 전환 방법, view의 생명주기 등을 새롭게 이해하게 되었습니다. 그리고 프로젝트를 통해 싱글턴, Protocol 과 Delegation 패턴 활용 등을 학습하고 적용해볼 수 있었습니다.