이번 주차 미션 정리
•
기능 요구 사항
◦
주어진 횟수동안 n대의 자동차는 전진 또는 멈출 수 있음
▪
사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 함
▪
사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시키고 앱 종료해야 함
▪
전진하는 조건은 0~9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우임
◦
각 자동차에 이름 부여할 수 있음
▪
전진하는 자동차 출력할 때 자동차 이름을 같이 출력함
▪
자동차 이름은 쉼표를 기준으로 구분하며 이름은 5자 이하만 가능함
◦
게임 완료한 후 우승자 알려줌
▪
우승자가 여러 명일 경우 쉼표를 이용하여 구분함
•
프로그래밍 요구 사항
◦
indent depth는 최대 2까지만 허용함 (while문 안에 if문 들어있음 2임)
◦
3항 연산자 금지함
◦
함수가 한 가지 일만 하도록 최대한 작게 만들어야 함
◦
Junit5와 AssertJ를 이용해 본인의 기능 목록이 정상 동작함을 테스트 코드로 확인해야 함 (test/java/study 참고)
◦
Randoms.pickNumberInRange(0,9)와 Console.readLine() 활용해야 함
•
과제 진행 요구 사항
◦
기능 구현 전에 기능 목록 만들고, 기능 목록 단위로 커밋하기
•
과제 목표
◦
함수 분리하고, 함수별로 테스트 작성하는 것에 익숙해지기
◦
소감문엔 이번주차 목표를 중심으로 학습하면서 느낀 점 적기. 이때 학습한 “과정”을 잘 드러내기
•
예외 처리
◦
자동차 이름 : 쉼표 사이의 무엇이든 가능
◦
이동 횟수 : 정수
[책] 객체 지향의 사실과 오해를 읽고 설계해보기
책 속 예시
•
이야기 : 하트 왕의 파이를 도둑 맞은 사건에 대해 모자장수가 증언함
◦
재판장엔 하트 왕, 하얀 토끼, 모자 장수가 있었음
◦
하트 왕이 “첫 번째 목격자를 불러라” 라고 명령함
◦
하얀 토끼가 “목격자인 모자 장수 나와라”라고 외침
◦
모자 장수가 증언대에 섬
◦
하트 왕이 “증언하라”라고 명령함
◦
모자 장수가 증언을 함
•
협력 : 요청과 응답
◦
누군가가 왕에게 재판을 요청함으로써 재판이 시작됨
◦
왕이 하얀 토끼에게 증인을 부를 것을 요청함
▪
왕의 요청을 받은 토끼는 모자 장수에게 증인석으로 입장할 것을 요청함
•
모자 장수는 증인석에 입장함으로써 토끼의 요청에 응답함
•
모자 장수의 입장은 왕이 토끼에게 요청했던 증인 호출에 대한 응답이기도 함
◦
왕이 모자 장수에게 증언할 것을 요청함
▪
모자 장수는 증언함으로써 왕의 요청에 응답함
•
책임 : 하는 것과 아는 것
◦
왕
▪
하는 것 : 하얀 토끼에게 목격자 불러오도록 요청, 모자 장수에게 증언하라 요청
◦
하얀 토끼
▪
하는 것 : 모자 장수가 증인석에 입장하도록 요청
▪
아는 것 : 목격자가 모자 장수라는 사실
◦
모자 장수
▪
하는 것 : 스스로 증인석에 입장(생성)
▪
아는 것 : 증언할 내용(자신이 알고 있는 사실을 증언해야 할 책임)
•
역할 : 책임의 집합 (재사용성)
◦
왕 → 판사
◦
모자 장수 → 증인
미션에 적용
삽질
삽질 2
•
이야기 : 자동차들이 경주를 함
◦
게임장에 자동차들, 자동차 매니저, 진행자, 심판이 있음
◦
진행자가 “자동차들 불러와라”라고 외침
▪
매니저가 “빨간 자동차, 파란 자동차 나와라”라고 외침
•
빨간 자동차와 파란 자동차가 스타트 라인으로 나옴
◦
아래를 5회 반복함
▪
진행자가 “자동차들 출발!”이라고 명령함
•
매니저가 “빨간 자동차, 파란 자동차 출발!”이라고 외침
◦
빨간 자동차와 파란 자동차가 이동함
▪
진행자가 “자동차들 현재 위치를 말해라”라고 명령함
•
심판이 “빨간 자동차 3m, 파란 자동차 1m 지점!”이라고 외침
◦
진행자가 심판한테 “우승자는 누구?”라고 물음
▪
심판이 “우승자는~ 빨간자동차!”라고 답함
•
협력 : 요청과 응답
◦
누군가가 진행자에게 경주를 요청함으로써 경주가 시작됨
◦
진행자는 자동차들이 스타트 라인에 설 것을 요청함
▪
진행자의 요청을 받은 매니저는 빨간 자동차와 파란 자동차가 스타트 라인에 설 것을 요청함
•
빨간 자동차와 파란 자동차는 스타트 라인에 섬으로써 매니저와 진행자의 요청에 응답함
◦
아래를 반복함
▪
진행자가 자동차들에게 이동하라 요청함
•
진행자의 요청을 받은 매니저가 빨간 자동차와 파란 자동차한테 이동하라 요청함
◦
자동차들이 이동함으로써 매니저와 진행자의 요청에 응답함
▪
진행자가 심판한테 자동차들 현재 위치 말하라고 요청함
•
심판이 자동차들의 현재 위치를 답함으로써 진행자의 요청에 응답함
◦
진행자가 심판한테 우승자를 답할 것을 요청함
▪
심판이 우승자를 답함으로써 진행자의 요청에 응답함
•
책임 : 하는 것과 아는 것
◦
진행자
▪
하는 것 :
•
매니저한테 자동차들 불러오도록 요청, 매니저한테 자동차들 이동하도록 요청
•
심판에게 자동차들 현재 위치 답하도록 요청, 심판에게 우승자 답하도록 요청
◦
심판
▪
하는 것 : 자동차들 현재 위치 판독, 우승자 판독
▪
아는 것 : 매 라운드 결과, 최종 결과
◦
(자동차) 매니저
▪
하는 것 : 자동차가 스타트라인에 입장하도록 요청, 자동차가 이동하도록 요청
▪
아는 것 : 게임에 참여할 자동차들
◦
자동차
▪
하는 것 : 스스로 스타트라인에 입장(생성), 이동
▪
아는 것 : 전진할 수 있는지 없는지 여부
•
역할 : 책임의 집합 (재사용성)
◦
진행자 → 경주 진행자 (RacingController)
◦
심판 → 경주 결과 (RacingResult)
◦
자동차 매니저 → 자동차 컬렉션 (Cars)
◦
자동차 → 자동차 (Car)
구현 기능 목록
삽질
용어 정의
•
경주 : 애플리케이션이 시작되어 경주가 시작되고 우승자가 나와 경주가 종료될 때까지를 의미한다.
•
이동 : 경주의 각 라운드를 의미한다. 매 이동(라운드)마다 자동차들은 전진하거나 안하거나 한다.
•
전진 : 이동과 달리 실제로 자동차가 움직였는지 안움직였는지 여부를 표현한다.
◦
결과값이 pobi : -- 라면 전진 횟수는 2회라는게 특정되는 반면, 이동 횟수는 알 수 없다.
Model
Car (자동차)
•
자동차 이름 유효성 검사 기능
◦
5자 초과면 예외 처리
•
전진 시도 기능
•
총 전진 거리 계산 기능
Cars (자동차 컬렉션)
•
자동차들 생성 기능
•
자동차들 이동 기능
RacingResult (경주 결과)
•
자동차들 총 전진 거리 수합 기능
•
우승 자동차 결정 기능
View
InputView
•
자동차 이름 입력 기능 (String → List<String>으로 변환해 반환)
•
이동 시도 횟수 입력 기능 (String → int로 변환해 반환)
◦
정수 아니면 예외 처리
◦
0 이하면 예외 처리
OutputView
•
자동차 전진 거리 출력 기능
•
우승 자동차 출력 기능
Controller
RacingController
•
경주 진행 기능
◦
자동차이름으로 자동차 컬렉션 생성 기능
◦
이동 시도 횟수만큼 자동차들 이동 기능
◦
각 이동마다 결과 확인 기능
◦
경주 결과 확인 기능
Util
RandomDigitGenerator
•
0~9 사이의 랜덤 숫자 생성 기능
Today in 프리코스
TIL 작성하기
준비
과제 설명 꼼꼼히 읽고 정리하기
몰입
객체지향의 사실과 오해 책 읽기
객체지향적으로 설계하기
기능 목록 작성하기(기능 내지 테스트 단위 중심)
•
다음 주차에 해보고 싶은 것
◦
[책] 테스트 주도 개발 시작하기를 참고해 설계해보기
Search