4주차 ~ 최종 테스트 전까지
이때는 지금까지 받아왔던 피드백을 기반으로, 2,3 주차의 미션과 이전 기수에서 진행했던 미션들을 시도했었습니다.
전반적으로 객체지향 적인 설계를 하는 것을 목표로 시도했습니다.
2~3주차 미션
- 이전에 받은 피드백또한 계속 확인해 가며 지키고 있는지를 확인했습니다.
이전 기수에서 사용된 미션
- 객체지향적인 프로젝트 구조에 대해 익숙해지려 노력했습니다.
- 또한 객체를 생성하며 객체에 대한 테스트 코드를 작성하고자 노력했습니다.
이전 기수 미션들
최종 테스트
점심 메뉴 추천 미션
최종 코딩 테스트 미션으로 점심 메뉴 추천이 주어졌습니다.
메일은 사전에 왔지만 미션 링크는 들어가지지 않는 상태였습니다.
처음에는 5시간 이내에 다 풀어야 한다는 압박감과 클린 코드와 리팩터링, 테스트코드를 짜야한다는 것에 자신도 없었습니다.

하지만, 메일의 말들을 보고 일단 어떻게든 구현해 보자 라는 생각으로 시작했었습니다.
그래도 여러 미션들을 시도해보며 프로젝트 구조를 구현해 보았던 것이 도움이 되었습니다.
요구 사항
1. 함수 가이드라인
함수는 한 가지 일만 하며, 최대 15라인을 넘기지 않는다.
2. Indent 제한
들여쓰기는 2까지만 허용한다.
3. 연산자 제한
3항 연산자를 사용하지 않는다.
else를 사용하지 않는다.
3. 클래스의 제한사항
공통 사항: InputView클래스에서만 readline()을 통해 입력을 받을 수 있다.
BridgeGame클래스에서 InputView, OutputView를 사용하지 않는다. (해당 부분 못했습니다.)
4. 카테고리와 메뉴사항
카테고리
일식, 한식, 중식, 아시안, 양식
메뉴
일식: 규동, 우동, 미소시루, 스시, 가츠동, 오니기리, 하이라이스, 라멘, 오코노미야끼
한식: 김밥, 김치찌개, 쌈밥, 된장찌개, 비빔밥, 칼국수, 불고기, 떡볶이, 제육볶음
중식: 깐풍기, 볶음면, 동파육, 짜장면, 짬뽕, 마파두부, 탕수육, 토마토 달걀볶음, 고추잡채
아시안: 팟타이, 카오 팟, 나시고렝, 파인애플 볶음밥, 쌀국수, 똠얌꿍, 반미, 월남쌈, 분짜
양식: 라자냐, 그라탱, 뇨끼, 끼슈, 프렌치 토스트, 바게트, 스파게티, 피자, 파니니
5. Random값
카테고리
String category = categories.get(Randoms.pickNumberInRange(1, 5));
- 일식
- 한식
- 중식
- 아시안
- 양식
메뉴
String menu = Randoms.shuffle(menus).get(0);
추천시 이미 추천한 메뉴, 먹지 못하는 메뉴도 포함된 리스트를 전달해야 한다.
점심 메뉴 추천
Controller
[ MenuController ] : 메뉴 추천의 출력과 입력 및 진행을 당담
메뉴 추천의 전반적인 동작을 관리하는 파일입니다.
Domain
[ Coach ] : 코치 클래스
코치의 이름과 못먹는 음식들을 가지고 있는 클래스이다.
[ Coachs ] :코치 리스트 클래스
입력받은 코치 리스트들을 관리하는 클래스
[ Menu ] : 메뉴 클래스
각 카테고리에 대한 메뉴들의 리스트를 초기화 한 저장소 클래스
[ MenuException ] : 메뉴에 대한 예외처리 클래스
메뉴에 존재하지 않는 음식이 존재할 경우 사용되는 예외 클래스
[ Day ] : 요일 클래스
요일의 이름과, 요일마다 코치들이 먹은 음식을 담는 클래스
[ DayRecommand ] : 각 요일 별 Day를 가지는 클래스
선택한 요일마다 선택한 카테고리 리스트와, 각 요일을 가지고 있는 클래스
[ MenuDomain ] : 상세 동작을 진행하는 클래스
controller를 통해 전반적인 동작이 진행될 때 세부 동작을 하기 위한 클래스, 다른 도메인에 대해 가지고 있어서 데이터 처리가 가능한다.
[ Result ] : 결과 출력을 위한 클래스
최종 결과 출력을 위한 데이터 처리를 하여 반환하는 클래스
Util
프로그램을 작성하면서 필요한 상수 값들을 모아둔 클래스입니다.
[ Categori ] : 카테고리 이름과 번호 상수값을 가지는 ENUM 클래스
[ CategoriCode ] : 카테고리의 최소 값과 최대 값과 카테고리 최대 중복 횟수를 가지는 ENUM 클래스
[ CoachCode ] :
- 코치 이름에 대한 최소-최대 길이
- 코치가 같이 식사하는 최소-최대 인원 수
- 코치가 싫어하는 음식의 최소-최대 음식 수
[ DayStatus ] : 날짜 요일에 대한 이름 상수 값
[ ExceptionMsg ] : 예외 처리 구문 관련 상수
[ MenuStatus] : 음식을 결정하지 않았을 대의 상수 값
[ PrintMsg ] : 출력을 위한 구문 관련 상수
View
[ InputException ] : 입력에 대한 예외처리 클래스
입력을 할 때 발생하는 예외를 따로 예외 클래스로 분리
[ InputView ] : 입력 클래스
입력에 대한 클래스
[ OutputView ] : 출력 클래스
출력을 모아 놓은 클래스
후기
사실 이번 코딩 테스트를 끝냈을 때, 딱히 미련이 남지는 않았습니다. 제가 할 수 있는 선에서 다 했고, 기본 테스트도 통과하여 잘 봤다고 말할 수는 없지만 운에 맡길 때가 온거 같습니다,,,
이제 진짜 다 끝났네요 생각보다 빨리 지나가서 아쉽기도 하지만 배운 것이 많아 좋았습니다.