[우테코 5기 프론트엔드] 프리코스 4주차 3일차

셔노·2022년 12월 20일
0

우아한테크코스

목록 보기
7/13

4주차 미션이 종료되고 시간이 많이 흐르고 회고록을 뒤늦게나마 작성합니다. 학교에서 진행하는 프로젝트 제출 기간과 우테코를 준비하는 시간이 많이 겹쳐 우아한테크코스 일정이 끝난 뒤 작성된 회고록입니다.

프리코스 4주차 3일째 🤓


⚙️ 기능 구현 우선 하기

오늘은 계획한대로 기능 구현부터 우선 완료하기를 먼저 목표로 잡았다.

단위 기능 목록에 따라 순서대로 하나씩 구현해가면서, 각 클래스의 역할은 처음 회고록에 작성했던 계획에 따라 작성할 것이다.

💡 코딩 준비

먼저 코딩을 하다보면, 하드 코딩하게 되는 상수와 문자열이 계속 눈에 밟혀, 메세지 문자열과 필요한 상수을 관리할 수 있도록 Constants 파일들을 정리해서 생성했다.

그리고 생각하는 flow로 흐르는데 방해되는 요소들을 제거할 수 있는 Validator 파일을 생성하였고, 바로 떠오르는 예외들을 먼저 채워 넣었다.

👷‍♂️ 다리 생성

그리고 다리 생성할 수 있는 BridgeMaker 에서 01이 생성되는 난수로 문자열 UD로 구성된 Array를 나오도록 기능 구현을 했다.

다음으로 inputView 로 유저에게 size를 입력 받아 다리를 생성할 수 있도록 구현 했어야 했고, size 입력을 기다려야하기 때문에 비동기로 동작하기 위해서는 콜백을 함께 던져주고 입력이 완료되면 콜백으로 돌아올 수 있도록 짜야했다.

그래서 입력 받은 size를 받아 BridgeMaker와 연결시켜 다리가 생성될 수 있게 구현하여, 단위 테스트를 만들었고, 생길 수 있는 예외상황 테스트도 함께 만들었다.

이번에는 예외상황이 발생하면, 어플리케이션 종료가 아니라 다시 재 입력을 받아야 하기에 try-catch문으로 작성하여, 예외상황 발생시 OutputView에서 오류 메세지 출력 후, 다시 inputView의 메서드가 콜백되도록 했다.

🌉 다리 건너기

다음으로 다리를 생성했으면, 다음으로는 다리 건너는 프로세서를 만들어야 했다.

처음에 건널 다리 위치(U:위/D:아래)를 입력받아야 하기에 유효성 검사부터 만들었고, 다음으로 다리 건너기 입력을 받아올 수 있도록 구현을 했다.

처음에 맵을 어떻게 그려줘야 할지가 고민이 되었고, 처음에는 문자열을 합쳐서 그릴까 생각했었는데, 코딩을 하다보니 그냥 U: 위/ D:아래 배열을 만든 다음, 출력할 때 join으로 합쳐 맵을 출력하는게 더 로직이 쉬울 것 같아 로직을 변경했다.

♻️ 리펙토링

그리고 만들다보니, Bridge 클래스가 컨트롤러와 모델의 역할을 한 번에 가지고 있어, 단위 테스트를 만들기가 어려워졌다. 그래서 BridgeMap 클래스를 만들어 Bridge Controller를 컨트롤러 역할만 할 수 있도록 리펙토링을 하였다.

그 후 BridgeMap에 대한 다리 건너기 테스트를 만들 수 있었다.

❓ 유효성 검사는 View의 역할인가?

리펙토링을 하다보니 inputView에서 유효성 검사를 하고 있었는데, 유효성 검사는 View의 역할인가 라는 문제가 보였다. 그래서 MVC에 대해서 다시 한 번 더 찾아보았다.

결론적으로 프론트와 백엔드로 나뉜다면 실질적으로 유효성 검사는 프론트에서도 백엔드에서도 다 하는게 맞지만, 현재 상황이라면, 컨트롤러가 유효성 검사를 하고 처리하는게 맞는 것 같았다. 그래서 inputView에 있던 유효성 검사하는 코드들을 Bridge Controller가 할 수 있도록 수정하였다.

🎯 결과 및 재시작 종료처리

위에서 결과처리와 재시작 종료처리를 생각하면서 코딩을 했다보니, 결과보여주는 것과 재시작 종료처리에 대한 부분은 생각보다 금방 완성했다. 예외상황도 많이 없었던 것 같다.

🤔 앞으로 할 리펙토링 준비

우선 우테코에서 주어진 테스트는 통과로 나왔다. 하지만 부분적으로 봤을 때 아직 리펙토링 할 부분이 많이 보여서 제출 전까지 계속해서 리펙토링이 필요 할 것 같다.

우선 리펙토링 하기 전에 코드 문제가 발생 할 수 있으니, 단위 테스트를 만들어 오류가 발생하지 않도록 방지 후 리펙토링을 할 수 있도록 해야겠다.

profile
초보개발자

0개의 댓글