# 47번 회의실 피어세션
## 🖥 참여자
- S026 송민관
- S029 심영민
- S030 양어진
- S053 조기현
## ⏱ 진행 시간
시간 : 9월 18일 13:30 ~ 15:30
## 📖 세션에서 고민한 내용
- 전체적인 설계
- PieGraph 그리기
- 라벨 위치에 관해서..
- CollectionView
- Autolayout Constraints 설정하는 방법
- SceneDelegate
- IBOutletCollection의 식별
- 태그 접근? : 리뷰어님이 유지보수 측면에서 좋지 않다고 함.
- Identifier 접근?
- NSCoding과 Codable을 통한 아카이브
- 클래스 내의 구조체 Codable + 클래스 NSCoding을 통해 상속 관계를 유지하면서도 클래스 내의 구조체 데이터까지 잘 저장할 수 있다.
## 공유/토론한 내용
- class diagram
- https://app.diagrams.net/
- Combine vs RxSwift
- collection view 사용법
- Collection View Cell의 크기는 `sizeForItemAtIndexPath`에서 설정하는데, 이때 정한 크기를 리턴해줄 수 있다.
- class와 struct를 섞어 복잡한 계층을 만들었을 때, userDefault를 사용하는 방법
- factory patter
- 객체 생성 로직을 분리할 수 있다. consumer가 직접 생성하지 않아도 됨.
## 배운 내용
- Notification.Name 을 Extension 하여 어디서나 사용할 수 있도록 하기
```swift
extension Notification.Name {
static let buttonDidTap = Notification.Name("buttonDidTap")
}
```
- Split View 설정하는 방법
- orientation 을 여러 모든 방향에 대해 가능하도록 설정
- Combine의 Sink 와 addObserver의 차이?
- Sink를 사용하면 따로 addObserver와 target함수 지정 필요없이 코드 블럭에 원하는 내용을 구현할 수 있다.
- Sink를 사용하면 현재 미션에서 한 Notification과 결합하여 사용하는 것 외에도, 어떤 publisher든 결합(구독)이 가능하다.
- Subscriber 프로토콜을 채택한 클래스를 구현해서, 모든 구독을 모을 수 있다. Subscriber 프로토콜은 받을 때 원하는 데이터 양을 조절하고, 에러 처리, 데이터 완료 후 complition까지 가능하게 해준다.