4주차 미션이 종료되고 시간이 많이 흐르고 회고록을 뒤늦게나마 작성합니다. 학교에서 진행하는 프로젝트 제출 기간과 우테코를 준비하는 시간이 많이 겹쳐 우아한테크코스 일정이 끝난 뒤 작성된 회고록입니다.
마지막주 4주차 문제는 다들 [자동차경주]로 나올 것으로 예상 했었지만, 기존에 출시된 적이 없었던 새로운 주제로 출시되었습니다.
영화 오징어 게임에서 나왔었던 게임과 유사한 룰의 게임이라, 문제 자체는 쉽게 이해할 수 있었습니다.
위아래 둘 중 하나의 칸만 건널 수 있는 다리를 끝까지 건너가는 게임이다.
throw
문을 사용해 예외를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 그 부분부터 입력을 다시 받는다.우선 문제에서 주어진 클래스와 제한 사항을 보면 MVC 모델링을 유도한 문제인 것 같았습니다. 그래서 MVC 모델링에 대해서 공부하고 클래스의 각 역할을 나눠보는 연습이 필요할 것 같았습니다.
MVC에 대한 내용은 아래 블로그를 기록하며 공부했습니다.
MVC 패턴 공부하기
각 클래스 역할을 우선 나눠보았습니다.
App.js
: BridgeGame 객체를 생성 후 실행 시켜주는 역할.BridgeGame.js
: 다리 건너기 게임을 관리하는 역할.BridgeGame
클래스에서 InputView
, OutputView
를 사용하지 않는다." 조건이 으로 다른 주제의 컨트롤러 객체 필요함.InputView.js
: 입력값을 받는 역할.OutputView.js
: 출력값을 보여주는 역할.BridgeMaker.js
: 다리의 길이를 입력 받아서 다리를 생성해주는 역할.BridgeRandomNumberGenerator.js
: 0 또는 1의 난수를 발생시키는 역할.다음으로는 기능 목록을 작은 단위로 나눠 구성해야할 것들을 간단하게 목록을 만들어 작성하고, 테스트를 만들어 보는 것을 목표로 했습니다.
0
인 경우 D(아래 칸), 1
인 경우 U(위 칸)이 건널 수 있는 칸이된다. const number = generateRandomNumber();
throw
로 [ERROR]"로 시작하는 에러 메시지를 발생시킨 후 다시 입력을 받는다.U
/ 아래 칸: D
중 하나의 문자만 입력할 수 있다.throw
로 [ERROR]"로 시작하는 에러 메시지를 발생시킨 후 다시 입력을 받는다.R
/ 종료: Q
중 하나의 문자를 입력할 수 있다.R
(재시도) 일 경우, 다시 첫칸부터 🌉다리 건너기를 시작한다.Q
(종료) 일 경우, 🚪종료하기로 넘어간다.R
/ 종료: Q
중 하나의 문자만 입력할 수 있다.throw
로 [ERROR]"로 시작하는 에러 메시지를 발생시킨 후 입력을 다시 받는다.최종 게임 결과
문구 출력게임 성공 여부
문구 출력 (성공/실패)InputView
에서만 MissionUtils
의 Console.readLine()
을 이용해 사용자의 입력BridgeGame
클래스에서 InputView
, OutputView
를 사용하지 않는다.BridgeRandomNumberGenerator
코드는 변경할 수 없다.BridgeMaker
프로퍼티를 추가할 수 없다.BridgeMaker
파일 경로는 변경할 수 없다.BridgeMaker
메서드의 시그니처(인자, 이름)와 반환 타입은 변경할 수 없다.단위 목록으로 작게 쪼개어 작성하니 문제에서 주어진 조건들을 놓치지 않고 구성 할 수 있게 되어 좋았습니다. 내일은 MVC를 좀 더 깊게 공부해서 클래스별로 파일 생성을 하는 것으로 해봐야 할 것 같습니다.