[TIL] 2월 15일
호눅스 수업 중 체스미션 관련 전체 피드백
커밋메시지 자세히 적기 → why가 들어가야한다.
PR도 자세히 설명한다.
테스트코드는 접근제어자 필요없다.
접근제어자를 뭐라고 해야할지 모르겠으면 일단 private, 나중에 필요할때 변경하기
PR 할때 충돌나면 PR하면 안된다. 충돌해결하고 PR해야한다.
미션3: 체스판 초기화
- Borad 클래스
-
리스트 pawns를 삭제하고 pawn의 색깔에 따라 해당되는 리스트에 담을 수 있도록 새로운 리스트 whitePawns 와 blackPawns를 생성했습니다.
-
distinguish() 메소드 추가 : 해당 pawn이 white인지 black인지 구별해서 해당하는 컬러의 리스트를 반환하는 메소드를 추가했습니다.
→ add(), size(), findPawn() 메소드 호출 시 distiguish() 메소드를 호출해서 whitePawns와 blackPawns 두 리스트 중 어느 리스트에 담겨야 할지 구별하는 기능을 추가했습니다.
-
상수 PAWNSNUM와 COLUMN 추가 : 각 색깔의 pawn 개수(8)와 체스판의 열의 개수(8)를 값으로 갖는 PAWNSNUM과 COLUMN을 추가했습니다.
-
initialize() 메소드 : PAWNSNUM 만큼 white, black 폰을 생성하여, 해당되는 리스트에 넣어주는 기능을 합니다.
-
getPawnResult() 메소드 : 인자로 List를 받아서 리스트의 요소들의 representation(폰을 표현하는 알파벳)을 하나의 String으로 만들어주는 역할을 합니다.
-
getWhitePawnResult() 메소드와 getBlackPawnResult() : 내부적으로 getPawnResult()를 호출하여 갖고 있는 요소들을 하나의 String으로 반환합니다.
-
getEmptyResult() 메소드 : 체스판의 피스가 놓여있지 않은 열은 "."으로 이루어진 String을 반환하는 기능을 추가했습니다.
-
print() 메소드 : 콘솔화면에 체스판을 출력합니다. getBlackPawnResult(), getWhitePawnResult(), getEmptyResult()를 호출해서 각 열마다 해당되는 폰이나 "."을 출력하도록 했습니다.
- Chess 클래스
- main메소드를 갖는 클래스 입니다.
- Scanner를 이용해서 시작과 종료 기능을 구현했습니다.
- 사용자에게 입력을 받아서 시작과 종료를 하는 기능, Board 객체를 생성해서 board를 초기화, 출력하는 기능들도 따로 메소드를 생성해서 분리해야 하나 싶었는데 이런식으로 하는 것이 나을지 아니면 현재 코드처럼 메인메소드에 다 넣는 것이 나을지 잘 모르겠어서 일단 현재 상태로 리뷰 요청드립니다!
- Pawn 클래스
- WHITE와 BLACK을 WHITE_COLOR와 BLACK_COLOR라고 상수명을 변경하여 색깔이라는 의미를 더 명확하게 하였습니다.
- 상수 WHITE_REPRESENTATION과 BLACK_REPRESENTATION 을 추가하여 각 폰에 해당되는 알파벳 p와 P를 대입하였습니다.
- 전역변수 representation을 추가하여 폰을 묘사하는 알파벳을 갖도록 했습니다.
- 생성자 수정 : 인자로 color뿐만아니라 representation를 추가하였습니다.
- BoardTest 클래스
- setUp() 메소드 : Pawn 인스턴스 생성시 color, representation 두개의 인자를 받도록 생성자를 변경해서 이에 맞게 코드를 변경했습니다.
- create() 메소드 : Board클래스에서 whitePawns와 blackPawns 리스트가 따로 구현되어 있어서 이에 맞게 코드를 수정했습니다.
- print() 메소드 : Board클래스의 getEmptyResult()가 잘 동작하는지 확인하는 테스트 코드를 추가했습니다.
- check() 메소드 : Board클래스의 size(), findPawn()메소드를 변경해서 이에 맞게 코드를 수정했습니다.
- PawnTest 클래스
- Pawn의 객체를 생성할때 인자로 넣은 값으로 color와 representation이 잘 초기화되었는지 확인하도록 하였습니다.
미션3 피드백 by 리뷰어 Brian
[yeon] 미션3: 체스판 초기화 by kimnayeon0108 · Pull Request #75 · codesquad-members-2021/java-chess
-
리턴타입을 List로 지정할때 타입 파라미터도 지정해주기
public List distinguish(Pawn pawn) { if (pawn.getColor().equals(Pawn.WHITE_COLOR)) { return whitePawns; } return blackPawns; } public Pawn findPawn(Pawn pawn, int idx) { return (Pawn) distinguish(pawn).get(idx) }
- findPawn()의 return 문에서 Pawn으로 형변환해주지 않으면 컴파일 에러가 떴고, 그 원인을 알지 못했다.
- distinguish에서 리턴타입을 List 으로 타입 파라미터를 지정해줘야함
- findPawn()의 return 문에서 Pawn으로 형변환해주지 않으면 컴파일 에러가 떴고, 그 원인을 알지 못했다.
-
해당 클래스 내에서만 사용하는 메소드들은 private으로 접근제어자 설정하기
-
else if 사용 지양하기
-
color가 representation까지 갖도록 하기 → enum 사용하면 될듯
-
생성자 파라미터 없이 ArrayList를 생성하면 capacity가 10인 ArrayList가 생성된다.
Java ArrayList Capacity - Java Code Examples
이 블로그 참고함
size : 요소의 수
capacity : 용량, 저장공간
- capacity가 가득 찼을때의 어레이리스트의 동작은?
- capacity가 가득 찼을때 어레이리스트는 기존 캐퍼시티의 1.5배 + 1의 크기로 증가되고 초기용량을 8로 설정한 어레이리스트에서 여덟개의 원소가 가득 채워지고, 아홉번째 원소가 추가될 경우 capacity가 13인 배열을 내부적으로 새로 생성한다.
- capacity가 가득 찼을때의 어레이리스트의 동작은?
git pull rejected 발생
코드리뷰를 받고 github PR 내에서 suggestion을 커밋하고,
로컬 step3에서 코드를 수정하고 커밋 후 origin에 push하려고하니 거부되어 원격 origin 저장소와 동기화가 필요했다. git pull origin kimnayeon0108:step3 브랜치를 했는데 계속 거부가 되었다(정방향 진행이 아님) 어떡하지
→ 브랜치 step3을 따라가는 remote를 생성해서 그걸 pull받고, 이 remote를 삭제하면 되지 않을까..
→ 안된다...
[GIT] Git pull 전략 (default, --ff -only, --rebase)
터미널에 뜬 메시지를 검색해보니 이 블로그가 나오는데 무슨 얘긴지 잘 모르겠다
→ git pull origin step3-initialize-board 이 명령어 치고 충돌해결하니 pull 성공했다. 따라서 push 도 성공했다.
git pull origin 하고 tab 누르니 HEAD랑 kimnayeon0108밖에 안나와서 git pull origin kimnayeon0108:step3-initialize-board라고 해야하는 줄 알았는데 이게 아니였나보다.
이 명령어는 원격 origin 의 step3을 pull 하는게 아닌가 보다. 둘의 차이가 뭐지 왜 tab했을때 안나오는거지
PR 보낸게 머지 되기 이전에 새로운 step브랜치를 생성하고 작업하고, PR 보낸 것이 머지 된 경우에 이후 절차?
로컬의 yeon브랜치에서 새로운 step브랜치를 생성한다.
→ PR보낸게 머지되면 로컬의 yeon 브랜치로 pull(또는 fetch & rebase)시킨다.
→ 이렇게 하면 yeon 브랜치에서 생성된 새로운 step이 자동으로 바뀐다. yeon에서 만들어진거니깐
오늘 한일
- 미션3 완료하고 PR 보냈다.
- print() 메소드를 if문을 나열해서 구현해서 마음에 들지 않는다.
- PR 보낸게 머지 되기 이전에 새로운 step브랜치를 생성하고 작업하고, PR 보낸 것이 머지 된 이후 절차를 명확히 모르겠어서 조원들에게 물어봤는데 다들 적극적으로 도와주셔서 이제 알 듯하다. 하지만 막상 내가 실행하려고 하면 문제가 생길까봐 무섭다. 그래도 그냥 해봐야겠다.
- git pull때문에 두시간을 삽질했지만 내가 명령어를 잘못 쳐서 두시간동안 헤매었다. 어쨌든 해결해서 다행이다
- ArrayList의 size와 capacity
- enum까지 공부하려고했는데 내일로 미뤄야겠다ㅠㅠ
Todo
(내일)
- 미션3 color, representation 부분 enum 사용해서 수정하기
- print() 부분 다른분들 PR한거 보고 수정해보기 - enum 학습하기
- JVM 오늘 호눅스 수업때 한거 복습하기
Author And Source
이 문제에 관하여([TIL] 2월 15일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeon/TIL-2월-15일저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)