@wongbing 웡빙 안녕하세요!! 4-1조 송준, Rowan JuiceMaker 첫 PR 보내드립니다 🙌 피드백 잘 부탁드립니다 🙏 ### 고민한 점 #### Nested Type 사용 #### 재고 표현 방법 * class Fruit 과일 인스턴스를 FruitStore에 생성 -> ```JuiceMaker.make```메서드에서 과일 프로퍼티에 접근하는 방법이 번거로웠습니다. 각각의 과일 프로퍼티에 접근할 때 배열을 사용해야하는 불편함이 있었습니다. ```swift= class FruitStore { class Fruit { let name: String let stock = 10 init(name: String) { self.name = name } } let strawberry = Fruit(name: "딸기") let banana = Fruit(name: "바나나") let kiwi = Fruit(name: "키위") let pineapple = Fruit(name: "파인애플") let mango = Fruit(name: "망고") func makeFruitsList() -> [Fruit] { let fruitsList = [self.strawberry, self.banana, self.kiwi, self.pineapple, self.mango] return fruitsList } func findFruit(fruitName: String) -> Fruit? { for i in 0..<makeFruitsList().count { if makeFruitsList()[i].name == fruitName { return makeFruitsList()[i] } } } } ``` * dictionary 클래스를 사용하는 방법 외에 딕셔너리를 사용하는 방법을 고민해봤습니다. 그 결과로 가독성이 좋아졌습니다. 추가적으로 딕셔너리를 생성함으로써 만약 외부에서 새로운 품목을 추가할 때 위의 클래스 방식보다 수월할 것이라 생각됩니다. 또한, JuiceMaker ```make```메서드에서 ```Recipe``` 열거형 ingredients 연산 프로퍼티를 통해 ```subtractInventory```메서드의 parameter 전달이 수월해졌습니다. ```swift= class FruitStore { var fruitsStock = ["딸기":10, "망고":10, "바나나":10, "키위":10, "파인애플":10] func subtractInventory(fruit: String, number: Int) throws { guard let selectedStock = self.fruitsStock[fruit], selectedStock - number >= 0 else { throw StockError.outOfStock } fruitsStock[fruit] = selectedStock - number } func addInventory(fruit: String, number: Int) { if let selectedStock = self.fruitsStock[fruit] { fruitsStock[fruit] = selectedStock + number } } func checkStock(fruit: String) { let resultMessage = "\(fruit)의 재고는 \(fruitsStock[fruit])개입니다." } ``` ### 조언을 얻고 싶은 부분 #### 이 코드에서 더 효율성을 낼 수 있는 방법이 궁금합니다!! #### Magic Literal/Number 사용 ```Dictionary``` key, value에서 (과일명, stock초기값)을 magic literal/number로 표현했습니다. magic literal/number의 사용을 지양하라는 피드백이 자주 보여서 고민해봤는데 dictionary 또는 enum에 값을 할당할 때도 적용해주는게 좋을까요? - *magic literal/number* ```swift= var fruitsStock = ["딸기":10, "망고":10, "바나나":10, "키위":10, "파인애플":10] ``` - *열거체* ```swift= enum fruit { static let strawberry = "딸기" static let mango = "망고" static let banana = "바나나" static let kiwi = "키위" static let pineappe = "파인애플" } ```