드디어 대망의 프리코스의 마지막 과제! 지하철 노선도 과제이다. 역시 마지막 과제는 요구조건이 굉장히 많았다. 요구조건의 대부분은 클린코드를 향해!! 기능 요구사항은 다음과 같다.

(깃 주소 : https://github.com/qhals321/java-subway-map-precourse/blob/bomin/README.md)

🧭 기능 개발 (백엔드)


기능 요구사항을 보면 엄청 자세히 나와있다. 예를 들어 역 관련 기능, 노선 관련 기능 이런 식으로 각 도메인 별 요구사항이 자세히 나와있다. 그러다보니 도메인을 나누는 데에 많은 도움이 되었고 나중에 다른 프로젝트를 개발할 때 이런식으로 도메인 별 요구사항을 잘 정리하면 코드를 작성하는 데에 있어 많은 도움이 될 것 같다.

기능부터 개발을 시작했다. 클린한 코드를 위해서는 리팩토링이 필수이니 기능 확인 작업을 위한 튼튼한 테스트 코드도 필수였다. (최대한 모든 상황의 수를 테스트 코드로 짜려다 보니 거의 시간의 80%는 테스트 코드를 작성하는 데에 사용이 되었다. 총 31가지 상황의 테스트를 짜게 되었다.)

구조는 다음과 같다.

무언가 기능 구현할 것도 많고 뷰도 많은 내용들이 있다보니 자연스레 MVC 패턴과 같이 코드가 구현되었다. 그리고 복잡한 서비스 로직이 없어서 서비스 레이어는 없이 repository - controller 흐름으로 완성하게 되었다. 이번 과제에서 기능구현은 최대한 유연한 코드가 될 수 있고 안전한 코드가 될 수 있도록 노력했다.

도메인 개발

Repository 개발

도메인의 상태관리를 해준다. 이번 과제들을 통해 repository에 대한 정의가 정확히 세워진 것 같다.

과제에서 기본 뼈대가 있었는데 흥미로웠던 건 Collections.unmodifiableList(lines) 라는 메소드였다. 이런식으로 배열의 불변성을 유지할 수 있구나..!! 하지만 테스트 코드를 짤 때 저장되어 있는 모든 도메인을 삭제해야했기 때문에 새로운 배열에 옮겨 담아줬다. new ArrayList(lines)<>.

만일 자바 내부에서 데이터를 관리하는 것이 아니라 외부 데이터베이스를 사용해 관리한다면, Repository가 바뀌어야했기에 Repository는 인터페이스로 선언하고 RepositoryJava로 코드를 구현하게 되었다.

Controller 개발