Skip to content

쥬스메이커 프로젝트 저장소입니다.

Notifications You must be signed in to change notification settings

newJunsung/ios-juice-maker

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 

Repository files navigation

ios-juice-maker🧃

쥬스메이커 프로젝트 저장소입니다.

목차⚡



기간:calendar:

2023.09.11 ~ 2023.09.27



팀원:busts_in_silhouette:

프로필 사진
in Github @newJunsung @JJong
in SeSAC 뉴준성

목차로 돌아가기

실행 화면:desktop_computer:

  • 주스 주문 화면 Simulator Screenshot - iPhone 15 Pro - 2023-09-22 at 13 49 27
  • 주스 주문 성공 화면 Simulator Screenshot - iPhone 15 Pro - 2023-09-22 at 13 49 40
  • 주스 주문 실패 화면 Simulator Screenshot - iPhone 15 Pro - 2023-09-22 at 14 29 14
  • 과일 재고 수정 화면 Simulator Screenshot - iPhone 15 Pro - 2023-09-22 at 13 51 24
  • 과일 재고 수정 (0 ~ 100개) Simulator Screenshot - iPhone 15 Pro - 2023-09-22 at 13 51 56
  • 과일 재고 수정 완료 화면 Simulator Screenshot - iPhone 15 Pro - 2023-09-22 at 13 51 58

목차로 돌아가기

실행 영상:clapper:

2023-09-22.13.53.02.mov

목차로 돌아가기

스토리보드:clipboard:

image

목차로 돌아가기

파일 구조:file_folder:

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
}
Loading

목차로 돌아가기

파일 설명:bookmark_tabs:

  • 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: 쥬스 종류를 정의합니다. 또한, 쥬스 종류에 따라 소모되는 과일과 개수를 정의합니다.
    • View

목차로 돌아가기

흐름도:ocean:

  • 쥬스 선택
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: 수량 적용, 쥬스 제조 완료 알림 전달
Loading
  • 과일 수량 증감
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: 수량 적용
Loading

목차로 돌아가기

클래스 다이어그램:pencil:

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
Loading

목차로 돌아가기

고민했던점 및 궁금했던점:interrobang:

STEP 1 PR

STEP 2 PR

STEP 3 PR

목차로 돌아가기

About

쥬스메이커 프로젝트 저장소입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 100.0%