---
# System prepended metadata

title: "\U0001F6E0 기능 구현"

---

안녕하세요 토니!!!
STEP2 요구사항에 대해 구현이 완료되어 PR보냅니다..!!
잘 부탁드립니다! 🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️🙇‍♂️ 


# 🛠 기능 구현
## ViewController
- setStockLabel()
    - viewDidLoad가 될 때 레이블 값을 초기화 시킵니다. 
- transitionView()
    - 버튼을 눌렀을 때 EditStockViewController로 화면전환 하는 부분을 메서드로 만들었습니다.
- **얼럿**
    - alertSuccess(for juice: Juice)
        - 쥬스가 성공적으로 만들어졌을 때 쥬스에 대한 얼럿을 표시합니다.
    - alertFailure(for error: Error)
        - 쥬스의 생성이 실패했을 때 에러에 대한 얼럿을 표시합니다.
- addNotification()
    - 노티피케이션 옵저버를 추가하는 메서드 입니다.
        - 과일저장소에서 noti한 값을 ViewController와 EditStockViewController 에서 받는다 생각해서 일대다 통신이라고 생각해서 값의 변화를 받아오는 부분을 노티피케이션 센터로 구현하였습니다.
- **@objc** 
    - didReceiveFruitsAmountChanged()
        - 노티피케이션을 수신했을 때 실행하는 메서드입니다.
- **@IBAction**
    - editStockButtonTapped()
        - 재고수정 버튼을 눌렀을 때 실행하는 메서드입니다.
    - orderJuiceButtonTapped()
        - 쥬스 주문 버튼을 눌렀을 때 실행하는 메서드입니다.
## EditStockViewController
- **@IBAction**
    - closeButtonTapped()
        - 닫기 버튼을 눌렀을 때 실행하는 메서드 입니다.
# 🤔 궁금한 점
- `NotificationCenter`을 통해 `FruitStore`클래스의 `fruitsStock`변수 값이 변경될때 마다 `post`하는 방식을 채택했는데 두가지 값이 변경될 때 두번 호출경우
    - `didset` 속성 감시자를 통하여 `post`하는 방식을 채택했는데, `딸바쥬스`, `망키쥬스`의 경우에 딸기와 바나나, 망고와 키위, 두가지 과일을 사용하다 보니 속성감시자에 의해 두번 호출되어 `post`가 두번 되는 상황이 발생했습니다.
    - 이 부분에서 이 상황이 설계의 문제인지 궁금합니다.
 
# 🙇‍♂️ 조언을 얻고 싶은 점
- `UIAlertController`통해 alert을 등록하는 과정에서 함수 분리 여부
    - 처음 시도 했던 것은, 하나의 함수에서 `alert` 대한 코드를 모두 관리하는 것을 선택했었습니다. 이 과정에서 함수에 들어가게 되는 파라미터 값이 거대해지고, 가독성이 좋지 않다는 판단 하에 `alertSuccess` 함수와 `alertFailure`함수 두가지로 분리하였습니다.
    - 위의 예시로 봤을 때, 가독성을 위해 `alert`에 대한 함수를 분리하면 좋을지, 아니면 하나의 기능을 담당하는 부분이니 함수를 통합하는 것이 좋을지 궁금합니다...!!

- 버튼을 눌렀을 때
    - 여러 버튼을 눌렀을 때 한 메서드에서 실행을 시켜주고 싶었습니다. 그래서 여러 버튼을 `orderJuiceButtonTapped` 메서드에 연결하고 switch 문을 통해서 버튼을 받아와서 처리해 주었는데요.
    - switch 문을 사용했더니 코드가 너무 길어져서 가독성이 좋지 않다는 느낌을 받았습니다. 좀 더 깔끔한 처리가 있을까요..? 조언을 얻고 싶습니다. 


-  `NotificationCenter` 사용 중 `object`, `userInfo` 값중 무엇을 통해 값 전달이 이루어져야 하는지
    - 두가지 속성 모두 값 전달에 사용될 수 있다는 점을 인지하고, 두가지 값 모두 사용하는 시도를 해보았습니다. `object` 값으로 넘겨줄 경우 두번의 타입캐스팅이 필요하여 가독성을 생각했을때, 좋지 않다는 판단하에 `userInfo`을 통해 값을 전달하는 방식을 채택했습니다.
    - `Dictionary` 값의 경우 `userInfo`와 `object` 중 무엇을 통해 전달하는 것이 조금 더 일반적일지 조언을 얻고싶습니다!