---
# System prepended metadata

title: Day11 - 학습정리
tags: [2020 Boostcamp]

---

###### tags: `2020 Boostcamp`
# Day11 - 학습정리

### 스스로 확인할 사항

* **OperationQueue 비동기 방식이 동기 방식과 달리 어떻게 다르게 동작하는지 자기만의 방식으로 정리한다.**

|                   동기                   |                      비동기                       |
| :--------------------------------------: | :-----------------------------------------------: |
|            task를 직렬로 처리            |                task를 병렬로 처리                 |
| 선행된 task의 작업이 완료될 때 까지 대기 | task를 비동기로 실행하고 대기 중인 다음 task 수행 |
|  task가 실행 중일 때 다른 task는 Block   |     비동기로 실행된 task에서 응답이 오면 처리     |

* **모듈/객체를 어떻게 나누고, 어떻게 모듈간의 협력관계를 맺는게 좋은지 자기만의 기준을 정리한다.**
  * 모듈이나 클래스에 존재하는 프로퍼티와 메서드들의 상호 관계를 파악
  * 그 요소들이 얼마나 상호간 의미있게 결합하는지 판단
  * 정체성, 고유성이 보장되는지 판단
  * 모듈, 객체간 응집도는 높히고 그들간 결합도는 줄이는 방향
  * 최대한 독립적인 단위로 생성

### 다같이 확인할 사항

* **비동기 방식으로 구현할 때 어려운 점은 무엇이고, 디버깅을 쉽게 도와주는 다양한 방법을 찾아서 비교한다.**
  * 비동기는 디버깅 하기가 까다롭다 (언제 작업이 끝날지도 모르고 언제 발생할지도 모른다)
  * 내부의 상태를 알기가 힘들다
  * 현재 실행되고 있는 Queue의 label을 참조하여 디버깅 할 수 있다

    ```swift
    String(validatingUTF8: __dispatch_queue_get_label(nil))
    ```

* **스레드를 생성하는 것과 여러 비동기 방식을 비교해보고, 어떤 제약사항이 있는지 비교한다.**

  * 스레드
    * 서로 데이터를 사용하다가 충돌이 일어날 가능성 있음
    * 디버깅이 다소 까다로워 짐. (버그 생성될 가능성 증가)
  * 비동기
    * delegate, @selector, block, Notification 등의 방법이 있음
    * 동기처리 보다 설계가 까다로움
    * Deadlock 걸릴 확률 높음