---
# System prepended metadata

title: 45번 회의실

---

# 45번 회의실

### 코드리뷰
- 김승언
    - ViewController == View 의 느낌이 강함 (GameViewController)
    - Game Play 자체를 비동기 처리한 것이 인상 깊음
    - Player 와 Players 클래스를 나눠서 구현
        - 사실상 Players가 Game 진행의 역할을 함
    - `addGameViewControllers(_:UIView)` 파라미터 사용하지 않음
    - `changeGameView` 에서 containerView를 받는 이유는?
        - 이미 property로 가지고 있음
        - 조금더 안전하게 접근하기 위함
    - 재사용의 의미 궁금
        - View의 템플릿을 만들고 그걸 재사용?
        - 메모리에 올라가 있는 Object를 재사용?
- 홍동현
    - Joker의 유무에 따라 의미가 바뀐다는 점을 고려해 Card를 Enum으로 정의한 것이 인상깊음
    - 카드 비교시 중복카드가 생길 수 있나요??
        - 중복의 의미 = 단순 숫자간의 중복 (Straight 판별 시 같은 숫자 뛰어 넘기 위함)
    - Players 안에 Dealer가 있는데 Dealer 프로퍼티 존재
        - 다른 사람은 설명을 듣지 않는 이상 햇갈릴 수 있을 것 같음
        - Dealer의 동작이 필요할 때만 Players에서 참조해서 해결 가능
    - 스트레이트 확인할 때, ace = 1 이던데 [10, j, q, k, a] 인경우는 어떻게 확인?
        - 스트레이트로 가정하지 않음
    - Score 계산 시 각 Rank 마다 따로 구현한 부분이 가독성 측면에서는 좋은데 중복 코드가 발생
    - View 들을 최소 단위로 쪼개서 관리한 것이 효율적으로 보임
    - enum 장인... 혹시 struct나 class를 안쓰고 enum을 사용한 이유가 있나요?
        - Joker의 의미를 나누기 위함
    - Protocol을 적극 활용한 부분이 확장성 부분에서 효율적으로 보임
- 이은정
    - Notification을 Main Queue로 태워 보낸 이유?
        - View 관련해서 Update가 이루어 지므로 MainQueue로 보냄
    - 조커 구분을 타입을 따로두어 enum 으로 제한된 연관타입을 사용한 게 인상적
    - dictionary count로 handrank를 구했는데 트리플이 2개나온 경우 어떤게 더 우선순위인지 비교는 어떻게했는지?
    - sorted 를 2번 쓰기 보다 인자 우선순위를 두어 하나로 합칠 수 있음
    - sorting 후 우승자 찾는 로직에서 배열 순위가 바뀔 가능성 있지 않을까요?
        - 현재 조커 유무 -> 랭크 로 정렬
    - 커스텀 에러로 에러처리를 잘 해주셨는데 try? 에서 아무것도 사용하지 않아서 아쉽습니다.

- 김근수
    - private(set) 에도 앞에 public 을 붙이셨는데 어떤 의미가 있나요?
    - Score Comparable 의 < 연산자 내부 구현이 반대로 되어있는데 의도하신건가요?
    - players 를 Participant 로 형변환하시는데 처음부터 Participant 로 선언하지 않은 이유가 있나요?
    - 재사용되는 뷰를 xib 로 구현하신게 인상적
    - 스토리보드와 코드, xib 를 적절히 섞어쓰신 것 같습니다.
    - 주석처리 깔끔하네요.
    
### Reviewer 리뷰 공유
- Hard coding No!!
- enum 관련해서 switch - case 쓸 때 default 쓰지 말자
- as 로 타입케스팅 할 때, 굳이 변수 뒤에 타입 쓰지 않아도 된다
- tag로 View에 접근하는 코드는 가독성이 떨어진다. 명시적으로 접근하자
- Unit test 이름
    - test_[condition]_[result]
- extension private
- 상수를 관리할 때 Enum을 적극 활용하자
- UIKit import 되어있으면 Foundation은 Import 안해도도 됨


### 참고할만한 것
[단위 테스트 도입하기](https://www.popit.kr/unit-test-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8F%84%EC%9E%85%ED%95%98%EA%B8%B0-1%ED%8E%B8/)
[Unit Testing](https://seizze.github.io/2020/01/08/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%ED%85%8C%EC%8A%A4%ED%8C%85%EA%B3%BC-%EC%8A%A4%EC%9C%84%ED%94%84%ED%8A%B8%EC%97%90%EC%84%9C%EC%9D%98-Unit-Testing.html)