---
# System prepended metadata

title: Untitled

---

@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 = "파인애플"
}

```