# 4그룹 3주차 ## 개인별 브랜치 [루이](https://github.com/code-squad/swift-chess-app/tree/haeseoklee) [Jake](https://github.com/code-squad/swift-chess-app/tree/ChocOZerO) [윤재영](https://github.com/code-squad/swift-chess-app/tree/jaeyoungyun) [Lychee](https://github.com/code-squad/swift-chess-app/tree/lychee) Mason 쑤 ## 개인별 설계 의도 - 루이 - 인풋부터 아웃풋까지의 흐름을 설계하고 코드를 작성했습니다. - 기존 테스트 코드가 깨지지 않도록 하며 요구사항을 구현했습니다. - Lychee - 윤재영 - 지난주까지 구현했었던 Board와 Piece를 변경없이 사용하고자 했습니다. - Jake - Player로 턴제 방식의 Board 구현 - Position을 분리하여 앱 전반에 관여하는 상급 지위로 올림(기존엔 Board의 하위 객체였음) - BoardPositionable, TeamSelectable, SymbolPresentable를 이용하여 Piece의 역할 정의 - Tile이라는 개념이 생겨 position의 상태를 관리 - Mason - 쑤 ## 개인별 구현 방식 - 루이 - StackView, UIButton을 사용해서 BoardView 구현 - Delegate 패턴을 사용하여 이벤트 처리 구현 (BoardViewDelegate, InputManagerDelegate, ChessBrainDelegate) - InputManager를 사용하여 인풋처리 - Lychee - 윤재영 - UICollectionView를 사용하여 체스판 UI를 구현 - Board의 display() 메소드로 가져온 String을 collectionView의 indexPath로 각 문자를 가져와 cell에 넣어 체스말 UI 구현 - collectionView의 indexPath를 Position으로 바꿔 board의 move 메소드에 활용 - Jake - Player - 팀과 최초에 가지고 있는 Piece 목록을 가지고 생성됨 - 그 외의 기능은 제거 - Position - Board 에서 벗어나 전반에 걸쳐 영향을 미치는 상급 지위로 변경 - Strideable 적용 - Int를 rawValue로 갖도록 변경 - PositionReader - String을 번역해 Position으로 변경해주는 역할 - 뷰를 만들때 사용하지 않아 존재만 함 - Piece - BoardPositionable, TeamSelectable, SymbolPresentable 라는 인터페이스를 채택하도록 역할 분리 - startPositions를 통해 처음에 놓여질 수 있는 자리 확정 - createOnStartPositions 이라는 팩토리 함수를 통해 타입에서 초기화에 사용되는 정보 제공받음 - Piece 구현체를 세분화함(예: BlackPawn, WhiteRook 등) - Board - BoardView에 실시간 업데이트가 가능하도록 보완 - Position에 특정 정보를 관리하는 TileStatus와 TileView 추가 - Mason - 쑤 ## 질의 응답 항목과 시간들 - 뷰를 구현하면서 지난 번에 구현했던 부분들이 수정되는 부분이 있었나? ## 소감 - 윤재영 - 처음에 설계를 잘해야 할 것 같다. 나중가니까 바꾸기가 귀찮다. - Jake - 배운다는 마음으로 설계도 자주 갈아엎고 고민을 많이 했다. - Lychee - 다른 사람들의 코드를 보면서 아이디어를 많이 얻었다. - 루이 - 회사 외에 따로 시간을 내서 하니 힘들었지만 재밌었고 열심히 했다. 마스터의 패드백을 많이 반영하지 못해 아쉬웠다.