---
# System prepended metadata

title: Untitled

---

- [그라운드 룰](https://amusing-syzygy-b9c.notion.site/Week7-8-cb736fce3d7a42f889d49376b7f13194)
## 작업 목록
- [x] 나만의 메뉴 구현
- [x] Price Generator 생성
- [x] CoreData 특정 Object 삭제 구현
- [x] 리팩토링
    - [x] 전체적인 UI 디테일 다듬기
    - [X] Usecase와 Repository 분기


## 실행 화면
![Oct-21-2021 20-37-00](https://user-images.githubusercontent.com/40790219/138269527-71993e03-cbfd-4d97-9294-5c67f66e47dc.gif)

## 고민과 해결
## 리뷰 포인트와 질문거리
### TableViewCell이 delegate로 VC를 참조하고 있어도 괜찮은가요?
> FavoriteCell.swift, line 110
~~~swift
weak var delegate: MyFavoriteViewController?
delegate?.present(UIAlertController.simpleAlert(title: "주문 완료", message: "제작 완료까지 약 \(makingTime)초 소요됩니다"), animated: true, completion: nil)
~~~
tableview의 cell에서 버튼을 눌렀을 때 UIAlertController를 띄우고 싶습니다.
cell에서 present를 호출할 수 없으므로 2가지 방법을 생각해보았습니다
- [ ] NotificationCenter를 이용하여 VC에서 present 호출
- [x] cell에 VC delegate를 가짐으로써 present 호출<br>
이 중 delegate를 이용하여 구현하고자 할 때 순환 참조를 염려하여 delegate를 weak로 선언하고자 하는데, cell이 VC를 delegate를 가지고 있는게 다소 어색하게 느껴지는데 리뷰어님의 의견이 궁금합니다!

### JSON Decodable 객체가 중복되어 있습니다.
Home에서 사용하고 있는 ProductInformation과, Menu에서 사용하고 있는 MenuInformation은 [https://www.starbucks.co.kr/menu/productViewAjax.do](https://www.starbucks.co.kr/menu/productViewAjax.do) 에 post요청을 보내서 받은 JSON에 대응하는 Decodable객체 입니다. 이 JSON이 필요없는 속성을 많이 가지고 있어

- `ProductInformation` 은 product_CD와 product_NM만 가지고 있게 만들었습니다.
- `MenuInformation` 은 ProductCD의 정보에 추가로 영양정보들을 갖고 있도록 만들었습니다.
    
    ```swift
    struct MenuInformation: Decodable {
        struct Detail: Decodable {
            let productCD: String
            let title: String
            let productENGName: String
            let content: String
            let allergy: String
            let kcal: String
            let sodium: String
            let protein: String
            let caffeine: String
            let fat: String
            let sugars: String
            let price: String = {
                PriceGenerator().generate()
            }() // 이 price는 서버에서 ""로 제공해서 임의로 넣은 random 값입니다.
            
            enum CodingKeys: String, CodingKey {
                case productCD = "product_CD"
                case title = "product_NM"
                case productENGName = "product_ENGNM"
                case content, allergy, kcal, sodium, protein, caffeine, fat, sugars
            }
        }
        
        let detail: Detail
        
        enum CodingKeys: String, CodingKey {
            case detail = "view"
        }
    }
    ```
    

그래서 궁금한 부분이 현재는 두개로 나눠논 Decodable 객체를 fetch할 때 각각 두 함수로 fetch하는데 중복을 생겨서 코드의 중복을 줄이기 위해 사용하는 모든 속성을 포함하도록 해서 상황에 따라 필요한 만큼만 사용하도록 해서 코드의 중복을 줄이는 편이 더 좋을지 궁금합니다.



### 인사
- [S034 윤상진](https://github.com/alibreo3754)
2주동안 리뷰요청에 대해서 이상한 질문을 많이 드렸었는데, 그래도 최선을 다해 답장해주신 리뷰어님께 마지막으로 감사인사 드리고싶습니다! 감사합니다. 더 열심히 고민하고 공부해서 이런 기회가 있다면 더 좋은 질문을 하도록 노력해보겠습니다.

- [S025 신명섭](https://github.com/s1gnature)
짝 프로그래밍을 진행하면서 리뷰를 신청한다는 것은 또다른 많은 것들을 고려해야 한다는 것을 깨닿게 되었습니다! 리뷰를 거듭할 수록 많은 것들을 생각하게 되고 고려해야 함을 느낄 수 있었습니다 감사합니다 :)