프로그래밍 요구사항은 Coin 클래스를 지정해둔것을 제외하고는 더 추가되지 않았다. 작년 프리코스는 인덴트가 한단계 더 줄었던걸로 알고있는데 다행이었다...😅
클래스 구조 및 관계
저번 과제 후기에서 MVC 패턴을 사용안할거라고 했었는데 2주차 백엔드 피드백에서 비지니스 로직과 UI로직을 분리하라
를 보고 적용해보았다. 어쩌면 다음 최종 과제 전에 연습해볼 수 있는 마지막 기회라고 생각이 들어 바로 MVC 패턴을 찾아보고 나름 구조를 나눠보았다. 이전에 알고만 있었던 구조로는 데이터를 관리하는 Model과 화면 관련 View, 그 외의 것들은 Controller로 알고있었다. 근데 생성한 인스턴스에서 값을 바꿔야하는 상황이 온다면 이게 Model인지 Controller인지 알 수가 없었다. 내가 생각하던 Model은 그저 데이터를 생성
해주기만 하는줄 알고있었기 때문에 애매하다 싶은 것들은 모두 Controller에 뒀고 과제를 진행하면 할수록 코드가 엉망진창이 되어가는게 느껴졌다. 결국 저장소를 다시 fork받아 처음부터 다시 시작하였다. 애매하게 알고있던 각 MVC만의 실제 용도에 대해 알아보았고 그 와중에 Service라는 것을 알게되어 별개의 비지니스 로직을 담당하는 Service를 추가하였다. Controller와 Service의 차이점이 뭔지 몰랐는데 도움을 많이 받은 블로그는 여기이다. 구조를 제대로 나누고 각 용도를 미리 정의해두니 현재 작성하는 코드를 어디에 둬야하지?라는 의문이 사라졌다. 실제로 존재하는 객체(ex.자판기, 뽑는 사람 등)로 인식하고 문제를 해결하다보니 이해하기 쉬웠다.
이번 과제에서 가장 어려웠고 많이 배운것은 클래스간 분리와 관계이다. 이번 과제를 통해서 소홀했던 디자인 패턴에 대해 알게되었고 작성하는 패턴 방식만 바꾸었을 뿐인데 코드 작성하는 것이 완전히 달라진다는 것이 신기하고 재미있었다. 😁
커밋 브런치
지난번에 feature로 나누었던 브런치들이 커밋 기록에 남아 지저분해보여 따로 브런치를 분리하되 머지시켰을 때에는 남기지 않도록 하였다.
쓸데없는 머지 기록이 없어 더 깔끔해보인다. 😁😁
테스트 케이스 추가
지난번에 테스트 케이스를 추가했었으나 중복적인 코드가 많아 너무 아쉬웠다. 테스트 관련 메소드를 분석하도 싶어도 모르는 것이 너무 많아 어려웠는데 이번 3주차에 드디어 깔끔한 형식으로 테스트 케이스를 추가했다. 이번 과제는 입력받는 상황이 많아 예외처리가 더 많았는데 다 완성한줄 알았던 코드들도 테스트를 돌려보니 안돌아가는게 (생각보다😂) 많았다. 테스트 케이스를 추가하지 않았더라면 어땠을지 아찔하다... 최종 코딩테스트에서도 시간만 된다면 꼭 테스트 케이스를 추가해보고 싶다.
입력값 예외처리
이번 과제에서는 입력받는 상황이 4번이 있어서 예외처리하는데 힘을 쏟았다. 다른 값들은 숫자가 맞는가? 정도지만 자판기에 등록하려는 상품 정보를 입력받을 때에는 예외처리가 어마무시하게 많았다. 미리 정해둔 형식을 제대로 따르고 있는지, 각 값을 제대로 입력했는지, 중복이름의 상품이 존재하는지 등 검증을 최대한 자세하게 하려했다.
3주차 과제 정말 피똥쌌다.ㅋㅋ 처음 구조를 잘못 설계해서 온갖 스파게티 코드도 작성해보고, 작성하던 프로젝트 다시 갈아엎어도보고, 테스트 추가하면서 완벽하게 짰다고 생각했던 것들도 정말 많이 수정하고, 무엇보다 과제 마감 직전까지 수정을 하는게 가장 쫄렸다. 근데 정말 코딩이라는 것이 고생한만큼 뿌듯함이 온다. 3주차에 가장 고생을 많이 했고 힘들었는데 많은 것을 배울 수 있던 주차는 3주차였다. 프리코스라도 붙고 싶어서 간절했던게 얼마전같은데 벌써 프리코스가 끝난 것이 아쉽기도하고 후련하기도 하다. 프리코스에서 가장 큰 성과는 이 다음 내가 어떤 것을 공부해야하는지를 파악했다는 것인거같다. 공부를 혼자 하다보면 이게 가장 어려운데 프리코스는 문제를 내는듯 하면서도 어떻게 공부하는 것이 좋은지를 유도한다. 3주동안 너무 좋은 경험이었고 보내주려니 너무 아쉽다. 😂😂