1차 요구사항:
기능 요구 사항
블랙잭 게임을 변형한 프로그램을 구현한다. 블랙잭 게임은 딜러와 플레이어 중 카드의 합이 21 또는 21에 가장 가까운 숫자를 가지는 쪽이 이기는 게임이다.
- 카드의 숫자 계산은 카드 숫자를 기본으로 하며, 예외로 Ace는 1 또는 11로 계산할 수 있으며, King, Queen, Jack은 각각 10으로 계산한다.
- 게임을 시작하면 플레이어는 두 장의 카드를 지급 받으며, 두 장의 카드 숫자를 합쳐 21을 초과하지 않으면서 21에 가깝게 만들면 이긴다. 21을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다.
- 딜러는 처음에 받은 2장의 합계가 16이하이면 반드시 1장의 카드를 추가로 받아야 하고, 17점 이상이면 추가로 받을 수 없다.
- 게임을 완료한 후 각 플레이어별로 승패를 출력한다.
실행 결과:
2차 요구사항:
기능 요구 사항
블랙잭 게임을 변형한 프로그램을 구현한다. 블랙잭 게임은 딜러와 플레이어 중 카드의 합이 21 또는 21에 가장 가까운 숫자를 가지는 쪽이 이기는 게임이다.
- 플레이어는 게임을 시작할 때 배팅 금액을 정해야 한다.
- 카드의 숫자 계산은 카드 숫자를 기본으로 하며, 예외로 Ace는 1 또는 11로 계산할 수 있으며, King, Queen, Jack은 각각 10으로 계산한다.
- 게임을 시작하면 플레이어는 두 장의 카드를 지급 받으며, 두 장의 카드 숫자를 합쳐 21을 초과하지 않으면서 21에 가깝게 만들면 이긴다. 21을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다. 단, 카드를 추가로 뽑아 21을 초과할 경우 배팅 금액을 모두 잃게 된다.
- 처음 두 장의 카드 합이 21일 경우 블랙잭이 되면 베팅 금액의 1.5 배를 딜러에게 받는다. 딜러와 플레이어가 모두 동시에 블랙잭인 경우 플레이어는 베팅한 금액을 돌려받는다.
- 딜러는 처음에 받은 2장의 합계가 16이하이면 반드시 1장의 카드를 추가로 받아야 하고, 17점 이상이면 추가로 받을 수 없다. 딜러가 21을 초과하면 그 시점까지 남아 있던 플레이어들은 가지고 있는 패에 상관 없이 승리해 베팅 금액을 받는다.
다사다난했던 미션이였다. 리뷰어가 사정이 생겨 리뷰어한테 리뷰를 못받아 토미가 2차 리뷰를 해주고, 구구가 갑자기 피드백을 주고, 블랙잭 룰을 잘 몰라 기능을 잘못 구현하고...
그래도 페어는 좋았다~ 이번엔 잘맞았어~!
이번 미션을 통해 알게 된것을 정리하면 다음과 같다.
1. 오버 엔지니어링 하지 마라.
공부 하는 거니 괜찮겠지~ 라는 마인드로 요구사항에 기술을 억지고 끼워맞추고 있었다. 이러면 코드가 더러워진다. 기술은 특정 상황에서 편의를 위해 만들어 진것이다. 따라서 필요할 때 기술을 갖다 써라, 기술을 억지로 끼워맞추지 마라.
레벨 1에서는 MVC를 사용하라는 말이 없었다. View와 Model을 분리하라는 말만 있었다. 착각하지 말자. 그리고 콘솔에서는 제대로된 MVC가 안된다.
2. 실전이 중요하다.
클린코드, 오브젝트를 읽고 그 내용이 머리속에 있음에도, 왜 그러면 안되는지 알고 있어도 코드에서 실수를 저질렀다. 이론을 배웠다면 최대한 많이 실전에 적용해보자.
1. 변수 이름을 명확히 하라.
2. 메서드 이름을 메서드의 실제 동작과 일치 시켜라
3. 추상 클래스 이름도 클래스의 역할을 나타내라, 추상클래스라 해서 이름으로 카테고리를 나타내지 마라.
4. 추상 클래스에서 특정 하위 클래스만 사용하는 상태와 행위를 정의하지 마라.
5. 코드를 작성한 뒤, 코드를 코드라고 생각하면서 해석하며 읽지 말고, 글이라 생각하면서 쭉 읽어보면 좋을거 같다.
그랬을 때 자연스레 읽히는 코드가 좋은 코드같다.
3. 요구사항을 제대로 파악하자
블랙잭 룰에 대해 높은 이해도 없이 기능을 구현했다. 그때문에 잘못 구현한 부분이 발생했고, 이들을 수정하기 위해 시간을 소비했다. 키보드에 손을 갖다 대기 전에 요구사항부터 제대로 파악하자.
4. 역시 vim은 좋다
함수나 변수의 정의로 이동할 때, 늘 인텔리J에서 "command + 마우스 좌클릭"으로 이동했었다. 어느순간 부터 이게 너무 귀찮더라.. 그래서 찾아보니 vim에서 gd를 누르면 정의로 이동한다길래 인텔리J의 vim 플러그인도 되나? 라는 생각으로 시도해봤다. 그런데!!! 된다ㅜㅜ 좋아~. 덕분에 마우스를 좀 더 덜사용하게 되었다. vim 좋아❤️