체스 체스는 가로와 세로가 각각 8줄씩 64칸으로 격자로 배열된 체스보드에서 두 명의 플레이어가 기물들을 규칙에 따라 움직여 사우는 보드 게임이다. 플레이어는 킹, 퀸 각 1개, 룩 2개, 나이트 2개, 비숍 2개 그리고 폰 8개로 총 16개의 기물을 가지고 시작하고 피스 6종류는 각각 다르게 이동한다. 체스는 기물을 움직이는 일반적인 방법 외에도 캐슬링, 앙파상, 프로모션과 같은 변칙적인 방법으로도 기물을 움직일 수 있다. 하지만 이번 미션 요구사항에 그런 규칙까지 구현하는 조건은 없었기에 많은 것을 구현하기보다는 구현해야 하는 요구사항에 집중하기로 페어와 얘기 후 결정했다. 체스 게임을 해보기는 했으나 많이 접해보지 못하여 도메인에 대한 이해도가 낮았기에 페어와 직접 게임을 하며 도메인을 이해해 보기..
블랙잭 블랙잭은 카지노 게임 중 하나로 트럼프 카드를 뽑아 21에 가까이 만들면 이기는 게임이다. 플레이어 간 대결을 하는 것이 아닌 각 플레이어는 딜러와 대결을 하게 된다. 딜러와 플레이어는 처음에 각 2장의 카드를 받고 게임을 시작한다. 플레이어의 카드는 모두 공개되며, 딜러의 카드는 한 장만 공개된다. 플레이어는 카드를 확인 후 더 뽑을지 결정할 수 있고 가지고 있는 카드 숫자의 합이 21을 넘는 경우 버스트로 딜러가 이기게 된다. 트럼프 카드에는 A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K의 수가 존재하는데 2~10은 나타내는 수가 점수가 되고 J, Q, K는 10점을 의미한다. A는 상황에 따라 1 또는 11 중 선택할 수 있다. 처음 받은 카드 2장 점수의 합이 21인..
우아한테크코스 블랙잭 미션에서는 딜러와 플레이어에서 발생하는 중복 코드를 제거해야 한다는 요구사항이 존재한다. 중복 코드를 상위 클래스로 옮기고 딜러와 플레이어가 상속하여 중복을 제거할 수 있을 것이다. 딜러와 플레이어 모두 블랙잭 게임을 참여하는 참가자이기에 공통 로직을 참가자에서 처리하면 된다. 하지만 상속에는 많은 단점들이 존재하기에 이를 고려해서 사용해야 한다. 지금까지는 상속의 단점을 제대로 이해하지 못했었기에 이번 기회를 통해 정리해보고자 한다. 상속 객체지향에서 클래스를 재사용하기 위해, 다시 말해서 중복 코드를 줄이기 위해서는 새로운 클래스를 추가하는 상속이라는 기법이 존재한다. 재사용 관점에서 본다면 클래스 안의 인스턴스 변수와 메서드를 자동으로 클래스에 추가하는 기법을 의미한다. 중복 ..
MySQL을 사용하다 보면 Root 비밀번호를 잊어버리는 경우가 존재합니다. 이를 해결하기 위해서는 Root 비밀번호 재설정이 필요합니다. 검색을 하면 여러 방법들이 존재하는데 의도된 동작을 하지 않을 때가 있어서 해 본 방법 중 가장 깔끔하게 진행된 방법을 정리해 보고자 글을 작성하게 되었습니다. 해당 방법은 MacOS, MySQL 8.0.32 버전을 기준으로 작성되었습니다. 1. MySQL 종료 MySQL 서버 실행을 위해서는 2가지 방법을 사용합니다. brew services start mysql homebrew를 통해 mysql을 설치했다면 위의 명령어를 통해 실행할 수 있고, 그렇지 않다면 아래의 명령어로 실행할 수 있습니다. mysql.server start 실행 중인 MySQL 서버를 종료시..
개요 @GetMapping("/{userId}/followers") public ResponseEntity getFollowers( @PathVariable("userId") Long userId, @PageableDefault(size = 10, sort = "userId", direction = Direction.ASC) Pageable pageable ){ User user = userFindService.findById(userId); List response = followService.getFollowers(user, pageable); return ResponseEntity.ok(response); } 프로젝트 코드 리뷰를 진행하면서 위와 같은 코드를 확인할 수 있었다. 서비스 레이어에는 @..