오늘은 원래의 예정했던대로 프리코스기간에 마지막으로 하였던 과제를 다시 풀어봤습니다.
최종 코딩테스트가 하루 남은 만큼 오늘도 실제 시험에 응한다는 마인드로 5시간안에 문제 풀이를 하자!!는 목표를 세우며 문제 풀이를 하였습니다.
일단 결론부터 말씀드리면 오늘 문제를 처음부터 풀이만 하는데 소모한 시간은 3시간 40분 정도가 소모됐으며 시간이 남아 매직넘버를 포함한 메시지들을 상수로 바꾸는 등의 리펙토링 작업을 실시한 결과 총 4시간 정도의 시간이 소모되었습니다.
이번 문제 풀이를 할 때는 이미 알고 있는 문제이기도 하여 구현 리스트를 이전에 만들어뒀던 것을 가져다 사용했습니다. 구현할 리스트를 처음 작성하는데 넉넉잡아 30~40분 정도가 소모된다고 계산을 하여도 시간이 남는 것 같습니다.
물론 이번 문제는 이전에 처음부터 2번을 풀이하였던 문제이기도 하여서 빨리 풀 수 있었지만 그래도 이전에 풀었을 때보다 확실히 MVC를 적용함에도 불구하고 막히는 부분이 별로 없이 코드를 빠르게 작성할 수 있었던 것 같습니다.
오늘 작성한 코드의 구성은 어제 연습하였던 subway-map-precourse 문제와 동일한 디렉토리 구조로 작성하였습니다.
코드 구조에 관한 설명은 최종 코딩테스트 대비-1 에서
2. 더욱 체계가 갖춰진 MVC
파트를 통해 확인하실 수 있습니다.
오늘 작성한 코드는 확실히 자판기 미션을 처음 작성하였던 코드와 두번째로 작성한 코드보다는 훨씬 메서드와 클래스의 역할 구분이 잘 되어있는 것을 확인하실 수 있습니다. 덕분에 코드의 재사용과 중간중간 코드의 리펙터링이 필요할 때 쉽게 변경할 수 있던 것 같습니다.
(바꿀 수만 있다면 오늘 작성한 코드를 3주차 미션 최종 제출 코드로 변경하고 싶네요😥)
오늘 코드를 작성하며 내일 제가 사용할 코딩 방식들을 몇가지 정리해보겠습니다.
말 그대로 입니다. 내일 있을 시험에서는 코드는 입력 부분부터 프로그램 실행 결과 예시에 따라 순서대로 코딩을 진행할 예정입니다.
과제를 진행할 때 저는 코드의 입력 부분의 작성을 하기 앞서 먼저 사용될 객체들과 예외상황 등을 먼저 작성하고는 하였습니다. 그 당시에는 과제 기간이 일주일이라는 넉넉한 시간이 주어져있어서 예외상황 처리와 같은 메서드 들은 test메서드를 작성하여 옳바르게 동작하는지 테스트를 먼저 할 수 있었습니다. 하지만 내일 있을 최종 테스트의 경우는 시간이 5시간으로 제한되어있기에 메서드 별로 테스트 코드를 작성하기에는 시간이 부족할 수 있기에 입력 부분부터 작성을 하며 내부 비즈니스 로직들로 뻗어갈 예정입니다.
그렇다면 각각의 로직별로 검증은 어떻게 하나?라고 생각하실 수 있습니다.
그래서 내일은 아래의 디버깅 기능을 사용하여 실행이 옳바르게 되는지 검증을 하려고 합니다.
IntelliJ에서는 다음 사진과 같이 특정 코드 라인을 클릭하며 표시를 해주고 디버깅 모드로 실행을 시킨다면 앞서 체크해둔 라인에서 코드의 실행이 멈추게 됩니다.
해당 기능을 활용하면 각각의 변수에 할당된 값과 값의 변화를 쉽게 확인할 수 있습니다.
물론 프로그래밍을 할 때 Test코드의 작성과 디버깅을 모두 활용하면 좋으나 내일은 시간이 정해져있는 테스트인만큼 시간 단축을 하고자 Test코드 대신 디버깅모드를 활용하여 시험에 임해보겠습니다.
내일 코딩테스트를 마지막으로 우테코의 선별과정은 끝이 납니다.
자기소개서 작성부터 지금까지 한달 반이 넘는 시간이 흘렀습니다. 지금까지 노력한 만큼 노력의 결실을 맺기 위해 내일도 최선을 다해서 시험에 임해보겠습니다.
오늘 연습한 자판기 미션의 코드는 다음 링크를 통해 확인하실 수 있습니다.
https://github.com/Seongwon97/java-vendingmachine-precourse/tree/Prepare_final_test