# 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
- 다른 사람들의 코드를 보면서 아이디어를 많이 얻었다.
- 루이
- 회사 외에 따로 시간을 내서 하니 힘들었지만 재밌었고 열심히 했다. 마스터의 패드백을 많이 반영하지 못해 아쉬웠다.