우아한테크코스 3기 백엔드 Lv1 [체스 - 1, 2, 3단계] Pull Request

김태희·2021년 3월 22일
0
post-thumbnail

Pull Request

안녕하세요, 제이!! 😃

반갑습니다!!

체스 규칙이 복잡해 구현이 어려웠던 미션이었습니다. :sweat_smile:

Pawn의 규칙이 가장 까다로웠습니다.

구조가 복잡해지다 보니, 각 객체들의 책임에 대해 고민을 많이 했어요.

체스 보드 세팅 정보를 외부에서 주입하도록 해, 매우 직관적이고 테스트에 용이한 코드를 작성했습니다.

로직들이 복잡하다 보니, 메서드들이 많아져 고민을 많이 했어요.

체스 보드 칸 위치와 기물들을 캐싱했습니다.

Direction 에서 방향을 판단하고, 각 기물의 이동 가능 방향들을 일일이 반환해 주다 보니, 클래스에 함수가 많아졌네요. :sob:

어려운 만큼 많이 성장하고 있는게 느껴져요!! :muscle:

제이의 피드백을 통해 더 성장하고 싶습니다. :smile:

감사합니다!! :bow:


인비의 학습로그

[OOP] 추상클래스 - 5

내용

  • 도메인들의 공통 부분들을 추상클래스로 뽑아 추상화 했다.
  • 중복이 사라지고, 자식클래스들이 매우 간단해졌다.
  • 메서드 오버라이딩을 통한 다형성을 구현했다.

링크

[OOP] DTO - 2

내용

  • Controller와 View의 의존성을 분리하기 위해 DTO를 사용했다.

  • View에 필요한 데이터들을 알맞게 담아 넘겨줄 수 있었다.

    링크

  • CommandDTO

  • ScoresDTO


[OOP] 의존성 주입 - 4

내용


[Java] Enum - 5

내용

  • Enum 클래스로 상수들을 종류별로 묶어서 관리했다.

  • 상수들을 종류별로 편리하게 관리하고 사용할 수 있었다.

  • 한 Enum 클래스에서 다른 Enum 클래스의 상수들을 묶어 활용하는 것을 경험할 수 있었다.

    링크

  • File

  • Rank

  • Command

  • Direction

  • PieceType

  • PieceWithColorType

  • TeamColor


[OOP] 일급 컬렉션 - 3

내용

  • 컬렉션을 클래스로 포장해 일급 컬렉션으로 만들었다.

  • 함수를 통해 컬렉션 활용을 다양하게 할 수 있었다.

  • 캡슐화를 하여 컬렉션의 남용을 방지했다.

    링크

  • Board

  • PositionsCache

  • PiecesCache

  • Players


[OOP] Caching - 4

내용

  • 체스 보드 칸의 위치들과 기물들을 캐싱했다.

  • 객체를 새로 생성하지 않고 재사용해, 메모리를 절약할 수 있었다.

  • static 메서드를 사용해 객체를 편리하게 가져올 수 있었다.

    링크

  • PositionsCache

  • PiecesCache


[JUnit] Nested 어노테이션 - 5

내용

  • 동일한 맥락의 테스트 코드들을 Nested 어노테이션을 사용해 묶었다.

  • Nested 어노테이션을 사용하지 않을 때는 연관된 테스트들끼리 구별하기가 어려웠는데, 이를 사용하니 훨씬 편해졌다.

  • Inner 클래스의 장점들을 활용할 수 있었다.

    링크

  • ChessGameTest

  • PieceTest


[Test] 테스트하기 쉬운 코드 - 5

내용

  • 처음에는 테스트 코드를 체스 보드의 위치값 문자열로만 테스트해, 작성하기도 어렵고 이해하기도 어려웠다.

  • 테스트하기 쉬운 코드로 리팩토링 하고 나니, 테스트 코드가 직관적이 되어, 이해하기도 작성하기도 쉬워졌다.

    링크

  • ChessGameTest

  • PieceTest


[Java] Stream - 3

내용


profile
Web Back-End (Spring, JPA, AWS)

0개의 댓글