---
# System prepended metadata

title: Untitled

---

- 🤓 James, 안녕하세요! (@inwoodev)
-  STEP 1까지 구현되어 PR 보내드립니다!

### 🤔 고민한 점
1. `Fruit Store` 에서 `increaseStock` 함수의 네이밍이 괜찮은지 조언이 필요합니다.
    ```swift
	func increaseStock(of fruits: [Fruit], by amounts: [Int]) {
        for (fruit, stock) in zip(fruits, amounts) {
            if let remainingStock = inventory[fruit] {
                inventory.updateValue(remainingStock + stock, forKey: fruit)
            }
        }
    }
    ```
    - 이 함수의 네이밍을 `changeStock`으로 하는 것과 `increaseStock`으로 하는 것에서 고민하였습니다.
    - 함수 내부 구현 상 `-` 기호가 없어서 `increase`라는 단어가 더 잘 함수를 표현한다고 생각하였습니다. 하지만, 함수의 기능으로 보았을 때에는`change` 라는 단어가 더 적절하다고 생각하였습니다.
    - 어떤 단어를 사용하는 것이 적절한지 궁금합니다.

2. 가변 매개변수를 활용하는 방법과 리스트를 반환하는 방법중에 어떤 것이 더 나은지 궁금합니다.
    ```swift
    // Before
    func makeJuice(juice: Juice) {
         switch juice {
            ...
         case .strawberrybananaJuice:
             if fruitStore.checkStock(fruit: .strawberry, stock: -10) &&
                 fruitStore.checkStock(fruit: .banana, stock: -1) {
                 fruitStore.changeStock(fruits: .strawberry, .banana, stocks: -10, -1)
             }
         case .mangokiwiJuice:
             if fruitStore.checkStock(fruit: .mango, stock: -2) &&
                 fruitStore.checkStock(fruit: .kiwi, stock: -1) {
                 fruitStore.changeStock(fruits: .mango, .kiwi, stocks: -2, -1)
             }
         }
     }
    ```
    ```swift
    // After
    func makeJuice(juice: Juice) {
        let juiceNeedFruits = juice.needFruits
        let juiceNeedStocks = juice.needStocks
        
        do {
		try fruitStore.haveStock(of: juiceNeedFruits, over: juiceNeedStocks)
		fruitStore.increaseStock(of: juiceNeedFruits, by: juiceNeedStocks)
        } catch StoreError.outOfStock {
            print("재고가 부족합니다.")
        } catch {
            print("알 수 없는 오류가 발생하였습니다.")
        }
    }
    ```
    - `juice`의 연관값과 가변 매개변수를 활용하여서 `haveStock(fruits:, stocks:)`와 `increaseStock(fruits:, amounts:)` 함수를 구성할 시, `makeJuice(juice:)` 함수에서 위의 함수를 호출하도록 구현했었습니다.
    - 하지만, 호출 시 juice의 각 케이스 별로 `haveStock`과 `increaseStock`을 각각 호출해줘야 하는 문제가 발생하였습니다.
    - 그래서 각 매개변수에 대한 리스트를 `juice` 타입이 반환할 수 있도록 구현했습니다.
    - 또한, 이에 대해서 Dictionary 타입을 반환하여서 `haveStock`과 `increaseStock`에서 불필요한 함수인 `zip`을 제거하는 방법을 활용하는 것이 적절한지 고민됩니다.
###
### 🤷‍♀️ 궁금한 점
1. 기능을 개발 시, 버그를 찾거나 버그를 사전에 방지할 수 있는 방법에는 어떤 방법이 있나요?