# 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)