본문은 야곰 아카데미 커리어 스타터 캠프를 통해 학습한 내용을 회고한 글입니다.
import Foundation
class Person {
var name: String
var money: Int
var coffee: Coffee?
init(name: String, money: Int) {
self.name = name
self.money = money
}
func buy(_ menu: CoffeeMenu, at shop: CoffeeShop) {
if money >= menu.price {
let coffee = shop.order(menu)
money -= menu.price
print("맛있는 \(coffee) 냠냠")
print("잔액이 \(money)원 남았습니다.")
} else {
print("잔액이 부족합니다.")
}
}
}
class Coffee {
var kind: CoffeeMenu
var amount: Int
init(kind: CoffeeMenu, amount: Int) {
self.kind = kind
self.amount = amount
}
}
enum CoffeeMenu {
case americano
case latte
var price: Int {
switch self {
case .americano:
return 4100
case .latte:
return 4600
}
}
}
class CoffeeShop {
var manager: CafeManager
init(manager: CafeManager) {
self.manager = manager
}
func order(_ menu: CoffeeMenu) -> CoffeeMenu {
print("\(manager.name)매니저님 \(menu) 주문 들어왔습니다.")
let coffee = manager.brew(menu)
print("주문하신 \(coffee) 나왔습니다.")
return coffee
}
}
class CafeManager: Person {
func brew(_ menu: CoffeeMenu) -> CoffeeMenu {
print("\(name)이 \(menu)를 만드는 중입니다.")
return menu
}
}
let hodoo: Person = (.init(name: "Hodoo", money: 10000))
let Rhode: CafeManager = (.init(name: "Rhode", money: 10000))
let starbucks: CoffeeShop = (.init(manager: Rhode))
hodoo.buy(.americano, at: starbucks)
'YAGOM CAREER STARTER' 카테고리의 다른 글
[TIL] 20230124: Generics (0) | 2023.01.26 |
---|---|
[TIL] 20230123: unit test, TDD, filter, reduce (0) | 2023.01.23 |
[TIL] 20230119: 데이터전달(델리게이트, 노티피케이션센터) (0) | 2023.01.21 |
[TIL] 20230116: Refactoring with delegation (0) | 2023.01.18 |
[TIL] 20230113: Protocol2 (0) | 2023.01.14 |