# Week3 Peer Session S1
## Camper
| 캠퍼 ID | 이름 | 소감 |
| :--------: | :--------: | :--------: |
| S031 | [오현식](https://github.com/Kinaan-Oh) | 서로 다른 시도를 해보았고 공유하여 많은 것을 배웠습니다. |
| S055 | [조기완](https://github.com/jogiking) | 다른 분들의 PR리뷰받은 것도 공유할 수 있는 시간을 가질 수 있어서 좋았습니다. |
| S042 | [이유진](https://github.com/lee-yujinn) | 다른 여러 스타일들의 코드를 보고 많이 배웠습니다~ |
| S026 | [신재웅](https://github.com/sustainable-git) | 과제도, 피어세션도 시간관리가 정말 중요하다고 새삼 느낍니다. |
| S047 | [이청수](https://github.com/bestowing) | MVC는 아직도 어렵지만 다른 분들의 코드를 관찰하다보니 감이 잡히는 느낌...! |
| S016 | [박상우](https://github.com/motosw3600) | 매번 너무알찬 조원분들과 피어세션..쵝5 |
| S039 | [이수현](https://github.com/soohyeon0487) | 7명이 모이면 7개의 코드 스타일이 있어서 배울게 많았습니다. |
## 발표 순서
1. S016
2. S026
3. S031
4. S039
5. S042
6. S047
7. S055
## 피어 리뷰
### S031
- S042
PictureView, SimpleView 관련 Notification의 경우 Notification type을 통일하고, Notificatino을 처리하는 로직에서 1단계 분기로 처리하는 것이 나을 것 같다고 말씀하셨고 공감하였습니다.
- S039
Color.Random 의 경우 굳이 Optional을 리턴해줄 필요가 없다고 말씀하셨고 공감하였습니다.
isPointIn 메서드의 경우, Point <= 연산자 구현보다는 ~= 연산자 구현한다면 좋을 것다고 말씀하셨고 공감하였습니다.
### S055
- S016
- ViewController에서 MARK 주석을 적극적으로 사용하는 것이 한눈에 파악하기 좋아서 나도 다음에 적용해보기로 생각했다.
```swift
// MARK: - IBOutlet Properties
// MARK: - Properties
// MARK: - LifeCycle
// MARK: - IBAction funcs
// MARK: - NotificationCenter funcs
// MARK: - Rectangle and Photo View funcs
// MARK: - Views Update funcs
// MARK: - Focus in and out funcs
... 등등
```
- guard 문법에서 else의 들여쓰기 스타일을 가이드하는 문서를 새로 알게 되었다.
- [Swift Style Guide](https://github.com/StyleShare/swift-style-guide#%EC%BD%94%EB%93%9C-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83)
- S026
- UInt와 같은 다양한 타입을 활용해서 런타입에서 오류를 잡아내려는 시도가 인상깊었다.
- 내 코드에서 frame 값을 랜덤 생성할 때 적용하면 좋을 것 같다.
- PictureFileManager를 사용해서 ViewController에서 리소스 관리를 하는 것이 인상깊었다.
- S031
- 직접 만든 타입들에 대해서 +, - 와 같은 연산자 정의를 한 부분이 있어서 확장성이 좋다고 생각했다.
- 지난번 미션에서 연산자 함수들을 만들어보겠다고 생각했는데 막상 이번 미션에서 연산자 정의를 해야겠다는 생각을 하지 못했다고 깨닳았다.
- view의 ID를 중복생성하지 않기위해 IdDispenser라는 객체를 따로 만들어서 관리한 점이 좋았다.
- NSCopying 프로토콜을 사용해서 객체를 복사, 뷰의 스냅샷을 찍어서 임시 뷰를 보여주는 방법을 새로 알게 되었다.
- S039
- 스토리보드에서 Container View를 사용해서 화면 구성을 하신 것을 보고 나도 다음에 사용해보기로 생각했다.
- S047
- 기존에 코드로만 해야했던 뷰의 테두리나 두께를 주는 부분을 스토리보드에서 할 수 있는 방법을 소개해주셔서 정말 좋았다. IBInspectable를 활용하는 것 같았다.
### S042
- 구현에 신경쓰다보니 관찰자 패턴 이 후에는 테스트 코드를 신경쓰지 못했는데 noti를 didSet에 post 해주는 부분에서 에러가 나는 것을 발견했다. 다음부터는 테스트 코드도 더 신경써야겠다.
- border값 변경 등 사소한 디테일한 부분은 놓치고 있었는데 피어세션을 통해 이런 부분도 생각해볼 수 있게 되었다.
### S026
- 하위에서 하지 않고, 상위에서 모든 노티피케이션을 Post하는 것이 옳겠다는 생각이 들었습니다.
- 이름을 명명하는게 참 힘들다는 생각이 듭니다. 계속 구글 번역을 쓰면서 단어를 찾는 행동을 반복하고 있습니다.
- 아직 노티피케이션을 완벽하게 알고 있지 않다는 느낌이 듭니다.
- 결합도를 낮추는 방법에 대해 조금 더 공부해야할 것 같네요.
### S047
- MVC 구조를 제대로 이해하지 못한 상태로 코드를 작성했는데 다른 분들의 코드를 보면서 감을 잡는데 도움이 되었습니다.
- 뷰 컨트롤러를 잘 활용하는 코드를 보고 역할을 분리하는 방법에 대해 고민을 많이 하게 되었습니다.
### S016
- 좋은 리뷰를 너무 많이받아 유익했던 시간이였던 것 같다. 상수를 바로 선언해서 사용하는 부분보단 따로 enum이나 처리를 해서 사용하는 부분이 더 변경할때나 위험도 관리 부분에서 좋을 것 같다.
- 다른 분들의 model구현 방식을 보니 프로토콜과 상속을 잘 모르고 사용했다는 생각이 들었다. 다음에 명확한 기준을 정하고 사용하는 편이 더 좋을 것 같다.
### S039
- S055
Q. 스토리보드에서 Container View를 사용하셨는데, 일반 View를 사용해서 하위 뷰를 관리하는 방법보다 어떤 장점이 있는지 궁금합니다.
A. 역할에 따라 분리를 하여 각각의 변경에 따른 사이드 이펙트가 최소화된다는 점이 장점이라고 생각합니다.
- S016
Q. 하나의 상위 파일안에서 하위 레벨의 모델도 같이 선언하셨는데 파일 하나안에 처리한 이유가 있는지 궁금합니다.
A. 개인적인 코드 스타일로 같은 흐름을 가진 모델들이라서 그대로 읽을 수 있도록 한 파일에 두었습니다.
- 느낀 점
- subscript에서 index 범위에 따른 예외처리가 필요할 것 같다.
- Plane에서 notification post를 관리하는게 맞는 것 같다.
- 각 데이터가 아니라 그 데이터를 관리하는 모델이 처리