우테코 프리코스 끝나고 아직 자바의 기초와 클린코드가 부족하다고 생각해서 우테코 프리코스 슬랙에서 대전지역 모각코 스터디에 들어감. 일단은 코테 발표를 기다리면서 2주정도 할 것 같은데 그 이후에 일정은 잘모르겠지만 학교를 벗어나 대전에서 개발하는 사람 찾는 건 유니콘 같은 느낌이였는데 처음 만나봐서 신기했음. 배울 것도 매우 많음.
1주차
간단하게 목표 설정, 매주 주말 이틀 나와서 토요일엔 5시간 동안 우테코 전 기수들 문제 랜덤하게 골라서 풀고, 일요일엔 서로 코드리뷰 및 리팩터링하는 시간을 갖기로 함
2주차 첫 날
랜덤하게 문제를 골랐는데 우테코 자판기 미션이 걸렸다. getter 안쓰기에만 용쓰다 너무 코드 짤 때도 답답했고 애플리케이션 거의 다 만들고 나서 기초 로직이 잘못됐다는 걸 깨달았는데 바꾸면 전체를 다 바꿔야되서 테스트는 돌아가는데 남은 금액보다 잔돈이 더 클때 계산 로직이 없는 상태로 만들어서 PR까지 했다.
어마어마한 코드리뷰
2주차 두번째 날
배열보단 컬렉션을 활용하기, getter 허용 범위를 늘리기, Enum 활용해 메시지, 매직넘버, 에러 관리하기, 함수는 한 가지 일만 하게 분리하기, 예외처리 복구 좀 더 이해하기 등이 있을 것 같다. 일단 기초 로직부터 잘못되어서 리팩터링보단 다른분들 코드리뷰에 집중하고 배워 갈 수 있을 것들을 찾았다.
잔돈 필드 변경 리팩터링 전 배열과 이넘 클래스 필드의 콜라보레이션리팩터링 후 이넘 클래스와 컬렉션의 조합으로 변경
2. 잔돈보다 남은 금액이 크다면 동전 최저 개수를 주기 위해서 큰 동전 단위부터 까는 로직 추가
3. Product 클래스에 적절한 getter 추가로 인한 Product List를 필드로 가진 클래스 메서드 변경
getter 추가리팩터링 전 Products 클래스리팩터링 후 Shelf 클래스
최저 가격을 필드에서 product를 돌며 반환해주는 메서드로 바꿨고, 하나의 상품만 끝나면 종료되게 짰던 코드에서 모든 수량이 소진되었을 때 종료되게 로직을 바꿨다. 또 상품 구매시 해당 상품이 소진되었다면 예외처리를 추가했다.
VendingMachine 클래스
리팩터링 전리팩터링 후
상품구매가 일어날 때마다 잔돈의 상태를 바꿔주는 로직을 추가했다.
Message, Error Message Enum 모음
리팩터링 전리팩터링 후
Error Message 를 가져올 때 prefix로 [ERROR] 처리
6. inputView 예외처리 복구시에 재귀 처리
리팩터링 전 while로 예외복구 처리리팩터링 후 재귀로 예외복구 처리
7. controller 메서드 별로 정리
리팩터링 전리팩터링 후
느낀 점
아직 클래스별 책임 분리가 어렵고 이걸 생각하면서 설계를 하다보니 점점 더 꼬이는 느낌이 있는 것 같지만 일단 꼭 필요한 로직들을 생각한 후에 책임을 분리를 많이 해봐야할 것 같다. 또 필드를 갖기보다 현재 상태를 메서드로 반환해주는 식으로 리팩터링 진행하면서 바꿔봤는데 이럴 때 절실히 더 공부가 필요하다고 느끼는게 stream 활용이다. stream으로 찾은 객체를 Optional로 감싸서 반환해주는 것, OrElse OrElseGet의 차이는 무엇인지 등등 순수한 자바 애플리케이션을 짜보면서 빨간 줄을 없애기 위해 많은 걸 공부하면서 스프링 강의를 들을때와는 또다른 새로움을 느꼈는데 빠르게 내 것으로 만들고 싶다.