이름을 통해 의도를 드러낸다, 축약하지 않는다.
공백도 코딩 컨벤션이다, 공백라인을 의미있게 사용한다.
같은 수가 같은 자리에 있으면 스트라이크,
다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱이란 힌트를 얻고,
그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다.
예) 상대방(컴퓨터)의 수가 425일 때
123을 제시한 경우 : 1스트라이크
456을 제시한 경우 : 1볼 1스트라이크
789를 제시한 경우 : 낫싱
위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다.
컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다.
게임 플레이어는 컴퓨터가 생각하고 있는 서로 다른 3개의 숫자를 입력하고,
컴퓨터는 입력한 숫자에 대한 결과를 출력
IllegalArgumentException
pickNumberInRange()
readLine()
-숫자 랜덤 생성
1부터 9까지의 숫자
3자리 자연수
각 자리 숫자는 중복 x
-사용자 입력
[예외사항] 3자리의 자연수가 아닌경우
[예외사항] 1부터 9까지의 숫자가 아닌경우
[예외사항] 각 자릿수의 숫자중 중복된 값이 있는 경우
[예외사항] 0이하의 음수의 경우
예외사항의 경우 IllegalArgumentException을 발생시키고 종료
-사용자 입력과 랜덤 생성 숫자 비교
같은자릿수에 같은 수 : 스트라이크
다른자릿수에 같은 수 : 볼
다른자릿수에 다른 수 : 낫싱
-비교 결과 출력
볼, 스트라이크 카운트 후 출력
출력순서 : (x)볼 (y)스트라이크
y가 3이 아닌경우 2.사용자입력 으로 전환
(y=3) 3스트라이크 시 게임 종료 문구 출력
-종료 조건 입력
1 입력 재시작 : 1.숫자 랜덤 생성으로 전환
2 입력 종료 : 게임 종료
[예외사항] 1과 2의 숫자가 아닌 잘못된 값을 입력할 경우
MVC 모델 적용
baseball
controller
BaseballGame (Model과 View를 결정하여 전달)
model
ComputerNumber (게임을 위한 숫자 랜덤 생성)
PlayerNumber (사용자 숫자 생성)
RetryNumber (재시작 생성)
util
NumberComapare (비교 후 볼, 스트라이크 카운트 저장)
Validator (사용자 입력과 랜덤 생성 숫자 비교를 위한 검증자 생성)
view
InputView (사용자 입력 클래스)
OutputView (출력 클래스)
MVC 모델을 적용하는 부분에서 클래스를 정확히 나누었는가?
Validator, RetryNumber의 이름과 위치에 대해서 고민했던 것 같다.
상수로 선언되는 부분을 그대로 하드코딩한 부분
다음과 같이 진행했어야 했을것 같다.
private static final int MIN_RANDOM_NUMBER = 1;
private static final int MAX_RANDOM_NUMBER = 9;
private static final int MAX_NUMBER_LENGTH = 3;
고민한 과정과 코드들을 보고 다시 주어진 세가지 요구사항을 다시 확인하니 주어진 요구사항이 어떠한 이유로 주어진 것인지 의도를 파악하는데 노력을 많이해야할 것 같은 생각이 들었다.
주어진 요구사항들이 결국 미션에 들어가기 전 목표를 달성하기위한 방향을 나타내고있다고 생각한다.
다음 회차때도 주어진 요구사항을 꼼꼼히 읽고 다른 관점에서 본다면 다른 의도가 있는지 시간을 많이 투자해야할 것 같다.