[TIL] 2월 15일

yeon·2021년 2월 15일
0

호눅스 수업 중 체스미션 관련 전체 피드백

커밋메시지 자세히 적기 → why가 들어가야한다.

PR도 자세히 설명한다.

테스트코드는 접근제어자 필요없다.

접근제어자를 뭐라고 해야할지 모르겠으면 일단 private, 나중에 필요할때 변경하기

PR 할때 충돌나면 PR하면 안된다. 충돌해결하고 PR해야한다.

미션3: 체스판 초기화

  1. 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()를 호출해서 각 열마다 해당되는 폰이나 "."을 출력하도록 했습니다.

  1. Chess 클래스
  • main메소드를 갖는 클래스 입니다.
  • Scanner를 이용해서 시작과 종료 기능을 구현했습니다.
  • 사용자에게 입력을 받아서 시작과 종료를 하는 기능, Board 객체를 생성해서 board를 초기화, 출력하는 기능들도 따로 메소드를 생성해서 분리해야 하나 싶었는데 이런식으로 하는 것이 나을지 아니면 현재 코드처럼 메인메소드에 다 넣는 것이 나을지 잘 모르겠어서 일단 현재 상태로 리뷰 요청드립니다!
  1. Pawn 클래스
  • WHITE와 BLACK을 WHITE_COLOR와 BLACK_COLOR라고 상수명을 변경하여 색깔이라는 의미를 더 명확하게 하였습니다.
  • 상수 WHITE_REPRESENTATION과 BLACK_REPRESENTATION 을 추가하여 각 폰에 해당되는 알파벳 p와 P를 대입하였습니다.
  • 전역변수 representation을 추가하여 폰을 묘사하는 알파벳을 갖도록 했습니다.
  • 생성자 수정 : 인자로 color뿐만아니라 representation를 추가하였습니다.
  1. BoardTest 클래스
  • setUp() 메소드 : Pawn 인스턴스 생성시 color, representation 두개의 인자를 받도록 생성자를 변경해서 이에 맞게 코드를 변경했습니다.
  • create() 메소드 : Board클래스에서 whitePawns와 blackPawns 리스트가 따로 구현되어 있어서 이에 맞게 코드를 수정했습니다.
  • print() 메소드 : Board클래스의 getEmptyResult()가 잘 동작하는지 확인하는 테스트 코드를 추가했습니다.
  • check() 메소드 : Board클래스의 size(), findPawn()메소드를 변경해서 이에 맞게 코드를 수정했습니다.
  1. PawnTest 클래스
  • Pawn의 객체를 생성할때 인자로 넣은 값으로 color와 representation이 잘 초기화되었는지 확인하도록 하였습니다.

미션3 피드백 by 리뷰어 Brian

[yeon] 미션3: 체스판 초기화 by kimnayeon0108 · Pull Request #75 · codesquad-members-2021/java-chess

  1. 리턴타입을 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 으로 타입 파라미터를 지정해줘야함
  2. 해당 클래스 내에서만 사용하는 메소드들은 private으로 접근제어자 설정하기

  3. else if 사용 지양하기

  4. color가 representation까지 갖도록 하기 → enum 사용하면 될듯

  5. 생성자 파라미터 없이 ArrayList를 생성하면 capacity가 10인 ArrayList가 생성된다.

    Java ArrayList Capacity - Java Code Examples

    이 블로그 참고함

    size : 요소의 수

    capacity : 용량, 저장공간

    • capacity가 가득 찼을때의 어레이리스트의 동작은?
      • capacity가 가득 찼을때 어레이리스트는 기존 캐퍼시티의 1.5배 + 1의 크기로 증가되고 초기용량을 8로 설정한 어레이리스트에서 여덟개의 원소가 가득 채워지고, 아홉번째 원소가 추가될 경우 capacity가 13인 배열을 내부적으로 새로 생성한다.

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 오늘 호눅스 수업때 한거 복습하기

0개의 댓글