쥬스메이커 프로젝트 저장소입니다.
2023.09.11 ~ 2023.09.27
프로필 사진 | ||
---|---|---|
in Github | @newJunsung | @JJong |
in SeSAC | 뉴준성 | 쫑 |
2023-09-22.13.53.02.mov
classDiagram
class Extensions {
UIColor+Extension.swift
UIViewController+Extension.swift
}
class Protocols {
FruitShowable.swift
}
class Controller {
AppDelegate.swift
FruitInvetoryViewController.swift
JuiceMenuViewController.swift
SceneDelegate.swift
}
class Model {
FruitStore.swift
FruitType.swift
JuiceMaker.swift
JuiceMakerException.swift
JuiceType.swift
}
class View {
Assets.xcassets
LaunchScreen.stroyboard
Main.storyboard
}
- JuiceMaker
- Protocols
- FruitShowable: 과일 개수의 증감이 일어날 때 View에 반영합니다.
- Controller
- FruitInvetoryViewController: 과일 재고 수정을 합니다.
- JuiceMenuViewController: 쥬스 메뉴의 주문을 처리합니다. 또, 주스 주문 및 과일 재고 수정을 합니다.
- Model
- FruitStore: 과일 개수를 조작하는 Class 입니다. 싱글톤 패턴으로 외부에서 접근할 수 있으며,
[FruitType: Int]
타입으로 과일 개수를 저장합니다. - FruitType: 과일 종류를 정의합니다. 또한,
(fruitType: FruitType, count: Int)
을Fruit
으로 typealias 합니다. - JuiceMaker: FruitStore 인스턴스에 접근 해, 주스 주문 및 과일 재고 수정을 하는 Struct 입니다.
- JuiceMakerException: 주스 주문시 과일 개수가 없는 경우, 과일 재고가 0보다 작은 경우의 예외를 처리합니다.
- JuiceType: 쥬스 종류를 정의합니다. 또한, 쥬스 종류에 따라 소모되는 과일과 개수를 정의합니다.
- FruitStore: 과일 개수를 조작하는 Class 입니다. 싱글톤 패턴으로 외부에서 접근할 수 있으며,
- View
- Protocols
- 쥬스 선택
sequenceDiagram
actor 손님
손님 ->> View: 쥬스 메뉴 선택
View ->> Controller: 어떤 메뉴 선택했는 지 전달
Controller ->> JuiceMaker: 선택된 쥬스의 재료 전달
loop 쥬스의 재료 과일의 수
JuiceMaker ->> FruitStore: 과일의 수량 확인
opt 과일의 수량이 부족하다면
FruitStore ->> Controller: negativeCountError 던짐.
Controller ->> View: 수량 부족 알림 전달
end
end
loop 쥬스의 재료 과일의 수
Note over FruitStore: 수량의 변화
end
Controller ->> FruitStore: 증가(감소)된 수량 확인
Controller ->> View: 수량 적용, 쥬스 제조 완료 알림 전달
sequenceDiagram
actor 사장님
사장님 ->> View: 수량 증가 or 감소 버튼 클릭
View ->> Controller: 과일 수량의 변화
alt 과일 수량이 감소했을 경우
Controller ->> JuiceMaker: 수량 감소 요청
JuiceMaker ->> FruitStore: 수량 감소 함수 실행
opt 과일의 수량이 음수가 될 경우
Note over FruitStore: 변화 없음
end
else 과일 수량이 증가했을 경우
Controller ->> JuiceMaker: 수량 증가 요청
JuiceMaker ->> FruitStore: 수량 증가 함수 실행
end
Note over FruitStore: 수량의 변화
Controller ->> FruitStore: 증가(감소)된 수량 확인
Controller ->> View: 수량 적용
classDiagram
class FruitShowable {
<<interface>>
~ setCount(fruit: Fruit, FruitLabels: [UILabel])
~ setCount(fruit: Fruit, FruitSteppers: [UIStepper])
~ setCount(UIComponents: [UIView]...)
}
class FruitType {
<<enumeration>>
~ strawberry
~ banana
~ pineapple
~ kiwi
~ mango
}
class JuiceType {
<<enumeration>>
~ strawberryJuice
~ bananaJuice
~ kiwiJuice
~ strawberrydBananaJuice
~ mangoJuice
~ mangoKiwiJuice
+ ingerdients(self) [Fruit]
}
class Fruit {
<<typealias>>
fruitType: FruitType
count: Int
}
class JuiceMaker {
~ make(juice: JuiceType)
~ update(fruit: Fruit)
}
class FruitStore {
<<singleton>>
- shared: FruitStore
- fruitCounts: [FruitType: Int]
~ update(fruit: Fruit, operator)
~ update(fruits: [Fruit], operator)
- applyCount(fruit: Fruit)
- getCalculationCount(fruitCount: Int) Int
- getCalculationCounts(fruits: [Fruit], operator) [Fruit]
}
class JuiceMenuViewController {
- juiceMaker: JuiceMaker
- fruitsCountLabels: [UILabel]
~ viewDidLoad()
~ viewWillAppear()
- order(menu: JuiceType)
}
class FruitInventoryViewController {
- juiceMaker: JuiceMaker
- fruitsCountLabels: [UILabel]
- fuirtsCountSteppers: [UIStepper]
~ viewDidLoad()
~ viewWillAppear()
}
FruitShowable <|.. FruitInventoryViewController
FruitShowable <|.. JuiceMenuViewController
FruitInventoryViewController -- JuiceType
JuiceMenuViewController -- JuiceType
JuiceType --> JuiceMaker
FruitInventoryViewController ..> FruitStore
JuiceMenuViewController ..> FruitStore
JuiceMaker .. FruitType
FruitType ..> FruitStore
FruitInventoryViewController .. FruitType