# 은행창구 매니저 PR (step 4) @havilog 안녕하세요 하비! 코낄이, 베토입니다. 어렵사리 step4 구현을 다 하고 PR 보냅니다. ## 고민했던 점 & 조언받고 싶은 점 ### 1️⃣ 동시성 구현 방법 - 저희가 step4를 진행하면서 기존의 `DispatchQueue`를 사용하던 방식을 `OperationQueue`를 사용하는 방식으로 수정하였습니다. 그 이유는 한번 작업이 `DispatchQueue`에 들어가게 되면 대기중인 작업을 취소하는 방법을 구현하는 것이 마땅치 않아 대기중인 작업을 쉽게 취소하고 정지할 수 있는 `OperationQueue`의 `cancalAllOperations` 메서드를 이용하여 구현하기 위해 `OperationQueue`를 이용하여 구현하는 것을 바꾸었습니다. 초기화 버튼을 눌렀을 때 모든 작업을 정지 및 취소가 되는 것을 구현할 때 `DispatchQueue`로도 구현이 가능한 지 궁금합니다. ### 2️⃣ ViewController * 현재 저희 코드를 보면 `BankManagerViewController`에서 `View`를 그리는 메서드들에 의해 코드 길이가 길어지며 `ViewController`가 많은 역할을 하는 것을 알 수 있습니다. 이렇게 되면 가독성도 좋지 않고 `ViewController`가 너무 무거워지는 것을 볼 수 있는데 고객정보 표현할 때처럼 `Custom View`를 만든 것처럼 `Custom View`로 하나하나 만드는 방법이 좋을까요? `View` 그리는 것을 어떻게 분리해야 좋은지 궁금합니다. ### 3️⃣ 타이머 타입 분리 - 업무 시간을 나타내는 `UILabel`과 시간을 측정하는 기능을 포함하며 하나의 `TimerStackView`타입으로 분리하였습니다. <img src="https://i.imgur.com/fEEPAYw.png" width=300> ### 4️⃣ Notification 주고받는 방향성 - 이벤트 전달을 양방향으로 주고받다 보니, 코드상으로 이벤트의 송수신을 추적하기 어려워진 것 같습니다. <img src="https://i.imgur.com/1FSZN7t.png" width=600> - 저희는 양방향으로 서로간의 전달이 필요하다고 생각해서 위와 같이 구현하였는데, 저희가 구현한 코드도 `여기서 post하는 이 이벤트를 어디서 받더라?` 고민할 때가 종종 있습니다.. :cry: - 가독성을 좀 개선할 방법이 있을지 조언을 받고 싶습니다. --- 상위객체-하위객체 간의 데이터 전달 방식을 Notification으로 선택하신 이유가 있으실까요? delegate, notification, KVO, closure등이 있었을텐데 각각의 장단점이 뭔지 알고계실까요? ### 코낄이 ### 베토 - KVO 장점 두 객체간의 동기화 (Ex. Model과 View 같이 분리된 파트간의 변경사항 전달) 내부 소스 변경 없이, 상태 변화에 대응할 수 있다. 변경 전/후 값을 파악할 수 있다. - KVO 단점 Objective-C 런타임에 의존 및 클래스만 구현 가능(NSObject 상속) dealloc될 때 옵저버를 지워줘야 한다.