3주차 추가 피드백
3주차 리뷰에서는 3주차 목표를 기준으로 리뷰를 남겨주셨습니다.
- 클래스 변수와 인스턴스 변수간 가독성을 위해 분리하여 구분
- 게임에 대한 매니저 클래스를 만들고 시작 -> 객체지향적 설계
- 비지니스 로직과 UI로직 분리
기존받았던 리뷰와 비슷했던 리뷰
- 배열보단 전부 List : 기존에 고정된 배열에 대해 인덱스 접근만 할 거 같아 배열을 사용했지만, List가 가지는 내부 기능과 차후 변경될 것을 고려하면 List로 선언하는 것이 더 나을 수도 있다는 생각이 들었습니다.
프리코스 4주차
마지막 주차의 목표
- 클래스 분리 연습
- 리팩터링
추가로 고려할 목표
- 테스트 코드 작성
- 객체지향적 설계
이번 주차에서는 지난번 주차에 이어 클래스를 분리하여 기능을 동작하도록 코드를 작성하고, 리팩토링을 통해 코드를 수정해 나가는 것을 목표로 요구 사항을 제시받았습니다. 또한 이전 주차들에서 목표 증 하나였던 테스트 코드 작성을 추가로 고려하였습니다. 또한, 클래스를 분리하며 부족했던 객체지향적 설계에 대해서도 고민을 해보았습니다.
요구 사항
1. 함수 가이드라인
함수는 한 가지 일만 하며, 최대 10라인을 넘기지 않는다.
2. 함수 파라미터 제한
파라미터는 최대 3개까지만 허용
3. 클래스의 제한사항
공통 사항: InputView클래스에서만 readline()을 통해 입력을 받을 수 있다.
BridgeGame클래스에서 InputView, OutputView를 사용하지 않는다. (해당 부분 못했습니다.)
InputView 클래스, OutputView 클래스
패키지 변경 가능, 메서드의 시그니처와 반환 타입 변경 가능, 사용자 값 입력을 위해 필요한 메서드를 추가할 수 있다.
BridgeGame 클래스
필드 추가 가능, 패캐지 변경 가능, 메서드 이름 변경 불가, 인자와 반환 타입은 필요에 따라 추가 가능
BridgeMaker 클래스
제공된 BridgeMaker 클래스 구현, BridgeMaker 필드 변경 불가, 메서드의 시그니처와 반환 타입 변경 불가
다리 건너기
저는 BridgeGame을 Controller 영역에 배치했는데 여기서 inputView와 OutputView를 사용하면 안되는 요구 사항이 있었습니다. 하지만 해당 요구 사항을 제대로 인지하지 못하여 잘못된 설계를 시작했습니다.
[ BridgeGame ] : 게임 시작 관련 클래스
게임의 시작과 재시작을 관리하는 클래스를 담당했습니다.
Model
[ Bridge ] : 게임의 다리를 만드는 클래스
게임을 진행하면서 다리를 만들게 되면 해당 값을 넣는 클래스,
[ Player ] : 게임을 진행하는 플레이어와 관련된 클래스
플레이어의 현재 위치, 지금 까지 왔던 거리를 담는 클래스
Service
[ BridgeService ] : 상세 동작 클래스
각 동작 기능을 담는 클래스, Controller에서 동작을 하게 되면, 여기서 필요한 상세 동작을 넣었습니다.
Util
프로그램을 작성하면서 필요한 상수 값들을 모아둔 클래스입니다.
[ BridgeGameStatus ] : 게임 실행 관련 상수 값들이 존재한다.
[ BridgeShapeInfo ] : 다리의 위아래 이동 관련 상수
[ BridgeSize ] : 다리의 최소 최대 크기에 관련된 상수
[ ExceptionPhrases ] : 예외 처리 구문 관련 상수
[ MoveMapIndex ] : 리스트 접근을 위한 상수
[ OutputException ] : 출력을 위한 구문 관련 상수
View
[ InputException ] : 입력에 대한 예외처리 클래스
입력을 할 때 발생하는 예외를 따로 예외 클래스로 분리
[ InputView ] : 입력 클래스
입력에 대한 클래스
[ OutputView ] : 출력 클래스
출력을 모아 놓은 클래스
후기
매주 요구 사항이 3개가 주어지고, 이를 만족하여 프로그램을 작성해야 했습니다. 하지만 이번 주에 제가 요구 사항 중 하나인 "클래스의 제한사항"을 제대로 지키지 못했던 점이 아쉬웠습니다.
InputView와 OutputView에 대해서 BridgeGame에서 작성하지 말라 되어있었지만, 해당 부분을 제대로 못 본 상태로 진행했던 것이 문제가 된 거 같습니다.
객체 지향적 설계
프로그램이 커지면서 많은 예외 사항과 요구 사항이 있었습니다. 지난 주차에서는 클래스를 분류하긴 했지만 제대로 된 설계를 하지 못했기에 예외 처리를 하거나 프로그램을 짜는 도중 빼먹는 부분이 있었습니다. 또한 자바가 객체지향 언어이지만 자바 언어의 특성을 제대로 살리지 못하고 있었습니다.
이런 문제를 해결하기 위해 다른 분들의 코드를 분석하며, MVC 패턴에 대해 다시 공부하여 객체 지향적인 설계에 대해 이해하려 노력했습니다.
기능에 따라 분류하기 쉬웠기 때문에 클래스를 분류하는데 도움이 되었습니다. 또한 객체지향적 설계를 공부하면서 클래스를 독립시키는데 도움이 되었고 리팩토링을 하는데 많은 도움을 줬습니다.
예외 처리 클래스 분리
입력에 대한 예외가 많아지면서 예외 처리에 대한 코드를 처리해야 할 부분도 많아졌습니다. 따라서 저번 주차에서도 우려했던 예외에 대한 메인 기능이 잘 안보이기 시작했습니다.
따라서 예외 처리에 대한 클래스와 예외 클래스를 분류하려 했습니다.
이를 통해 어떤 예외를 하는지 메인 기능을 바로 볼 수 있었고, 가독성이 증가했습니다.
프리코스가 끝났습니다. 4주차를 진행하면서 요구사항을 못 지키는 등 많은 아쉬움이 남았지만, 그 보다 더 많은 배움이 있었던 거 같습니다.
이 프리코스를 통해 "좋은 개발자로 성장하는 법"에 대해 잠시나마 느낄 수 있었고, 비전공자이다 보니 혼자 찾아가며 공부해 나가서 막막한 부분도 많았지만 우테코 프리코스 과정에서 학습의 기회를 얻고 동료들에게 피어 리뷰를 받으면서 많이 성장한 것 같습니다.
또한, 성장이 정체되어 제자리에 머물러 있던 저를 이렇게 성장할 수 있는 프로젝트 경험을 주신 기회와 지원자들이 경쟁자가 아닌 서로에게 피드백을 주고받을 수 있는 관계라는 인식할 수 있는 계기가 되었습니다.
붙든 안 붙든 앞으로 시간이 남았는데 저는 스터디를 하고 있지만, 새로운 스터디도 해볼까 생각 중입니다.
다시 한번, 다들 수고 많으셨고, 좋은 결과 얻길 바랩니다!!!