4주 차 미션은 크리스마스 프로모션 으로
이메일 형식의 요구사항이 전달되었습니다.
3주 차 미션과 동일한 학습 목표를 가졌고,
클래스 분리에 대해서 도움을 주는 예시와 요구사항이 추가 되었습니다.
추가된 요구사항은 UI와 도메인 로직을 나눠서 생각할 수 있도록
UI에 관한 클래스 예시였으며, 저는 도메인 분리에 초점을 맞춰야 한다는 생각이 들었습니다.
따라서 이번 미션에서는
도메인을 분리하는 것에 조금 더 깊이 이해할 수 있도록 이 전 주차에서 어려움을 겪었던
Java Enum 에 대해서 알아보는 것이 중요하다고 생각했습니다.
3주 차 미션에서 Enum 사용이 어려우셨다면
저와 같이 Java Enum 어떻게 사용해야 하는지 글로 정리하는 것을 추천드립니다 👍
저는 자동차 경주 미션에 다음과 같은 요구사항을 추가하여
- "1,2,3등 메달과 상금 부여",
- 자동차 선택(국내차, 외제차)
먼저 고민하고 사용해보았습니다 !
그 과정을 통해 이번 미션에서 제가 생각하기에 가장 중요해 보였던
Enum 활용에 많은 장점을 가지고 미션을 시작하였던 것 같습니다.
이번 미션에서 많이 신경 쓴 부분은
Enum 관리,
유지보수하기 쉬운 클래스로 분리하기,
단위 테스트입니다.
이번 미션에서 주어진 목표에 대한 생각
제가 생각한 목표에 대한 의도는 다음과 같습니다.
1. 중복된 할인과 증정을 허용해서, 고객들이 혜택을 많이 받는다는 것을 체감할 수 있게 하는 것
여러 개의 Event(할인) 요구사항이 존재한다.
어떻게 이벤트 타입을 유지보수하기 쉽게 분리할 것인가?
2. 올해 12월에 지난 5년 중 최고의 판매 금액을 달성
최대 판매 금액을 달성하여 식당 주인은 새로운 메뉴도 개발하고 새로운 타입의 메뉴판도 생길 수 있다.
어떻게 메뉴와 주문을 유지보수하기 쉽게 다룰 것인가?
3. 12월 이벤트 참여 고객의 5%가 내년 1월 새해 이벤트에 재참여하는 것
내년 2024년도 1월에 추가 요구사항을 반영하여 사용할 것이다.
어떻게 유지보수하기 쉬운 달력을 만들 것인가?
이번 미션에는 크게 이벤트, 메뉴, 달력이 있다고 생각하였고,
객체에게 역할을 주고 분리하며 단위 테스트와 함께 미션을 진행했습니다.
진행과정
달력
[이슈 정리]
Java에는 달력을 표현하는 많은 클래스가 존재한다. 활용하는 게 단위테스트를 할 수 있을까?
[분석]
제한된 타입으로 범위가 커지며 단위테스트 하기 어려운 코드이다.
제한된 타입으로 유지보수하기 어려운 코드가 작성된다.
[진행]
날짜, 년, 월, 일을 모두 설계하여 day에 대한 유효성과 유지보수성을 증가시켰습니다.
날짜 클래스에게 평일, 주말, 요일, 날짜 비교(LocalDate)와 같이 역할을 부여하였고 객체 지향적인 코드를 설계하였습니다.
메뉴
[이슈 정리]
메뉴를 메뉴 종류와 메뉴 이름, 메뉴 가격, 수량 등 다양한 형태로 표현할 수 있다. 이를 그룹화 하는 게 어떨까?
[분석]
클래스를 `분리`만 한다면 이들의 관계를 파악하기 어렵다.
클래스 명과 메서드명으로는 값과 관계를 예측하기 어렵다.
추가 기능 구현하는 것이 어렵다.
[진행]
Enum을 사용하여 데이터를 그룹화 (메뉴 종류, 메뉴) 하였습니다.
Enum에게 상태와 역할을 부여하여 관련된 처리를 Enum 안에서 확인할 수 있게 작성하였습니다.
Enum을 활용해서 타입 변환과 요구사항을 관리해 유지보수성을 높였습니다.
이벤트
[이슈 정리]
다양한 이벤트 타입이 존재한다. 어떻게 유지보수성이 높은 코드를 작성할까?
[분석]
이벤트들은 동일하게 이벤트 날짜 기간 검증, 할인 금액을 계산해준다.
[진행]
Sealed 클래스를 사용하여 이벤트 타입을 제한하여 구현을 진행했습니다.
이벤트를 분리하여 단위테스트 작성이 쉬워졌고, 가독성이 증가했습니다.
Enum 타입을 활용해서 empty, "없음"과 이벤트 뱃지를 구현했습니다.
정리
프리코스 과정에서
목표를 가지고 몰입하여 재미를 느끼는 경험,
다음 미션에 피드백을 적용하여 코드를 개선하는 경험,
하나의 문제나 목표에 대해 다양한 의견을 나누는 경험과 같이
주차 별 코드 리뷰, 소통을 만드는 문화와,
경력 개발자의 리뷰(피드백)는 저에게 많은 성장을 가져온 것 같습니다.
이 경험이 저의 학습 방식(먼저 고민하고 정리해보는)에서도 좋은 영향을 미쳤고,
프리코스의 문화에서 많이 배웠던 것 같습니다 ! 👍
4주 차 코드는 아래 코드로 확인하실 수 있습니다.
https://github.com/COBI-98/java-christmas-6-COBI-98
다음 목표 정하기
- 주차 별 리팩터링
4주차까지 쌓인 프로그래밍 요구사항과 공통 피드백 사항들을 모두 적용시켜보자 !
지난 4주를 돌아보면서 부족한 점을 확인하고 내 코드를 피드백하는 경험을 해야겠다.
- 최종 코딩테스트를 경험해보기
1~ 4주 차 미션과 같은 유형을 5시간 안에 구현할 수 있을까?
시간 안에 어디까지 구현할 수 있을지 경험해보는 시간을 가져봐야겠다.
'우아한 테크코스' 카테고리의 다른 글
[우테코] 프리코스 3주차 '로또' 미션 회고록 (0) | 2023.11.12 |
---|---|
[우테코] 프리코스 2주차 '자동차 경주' 미션 회고록 (0) | 2023.11.06 |
[우테코] 프리코스 1주차 '숫자 야구' 미션 회고록 (2) | 2023.10.30 |
[우테코] 우아한테크코스 지원 [+2024 입학 설명회] (2) | 2023.10.19 |