늦었지만 우테코 프리코스 회고 - 4주차
4주차에는 우테코에서 직접 만든 미션이 부여됐다.
크리스마스에 진행될 사내 이벤트의 기획안을 받아 개발하는 미션이었는데, 실제 기획안과 비슷하게 제공되어 신선하다는 느낌을 받았다.
우선 3주차 피드백 간단히 정리하고...
<3주차 피드백 간략 내용 정리>
1. 함수(메서드) 라인은 15라인 이내로 작성한다
2. 발생할 수 있는 예외 상황에 대해 고민한다
3. 비즈니스 로직과 UI 로직을 분리한다
4. 연관성이 있는 상수는 static final 대신 enum을 활용한다
5. final 키워드를 사용해 값의 변경을 막는다
6. 객체의 상태 접근을 private로 제한한다
7. 객체는 객체스럽게 사용한다
: 데이터를 꺼내지(getter) 말고 메시지를 던지도록 구조를 바꿔 데이터를 가지는 객체가 일하도록 한다.
8. 필드(인스턴스 변수)의 수를 줄이기 위해 노력한다
9. 성공하는 케이스 뿐만 아니라 예외에 대한 케이스도 테스트한다
10. 테스트 코드도 코드다(적절히 리팩토링하라)
11. 테스트를 위한 코드는 구현 코드에서 분리되어야 한다(테스트를 위한 메서드를 구현 코드에 구현하지 마라)
12. 단위 테스트하기 어려운 코드를 단위 테스트하기
13. private 함수를 테스트 하고 싶다면 클래스(객체) 분리를 고려한다
<4주차 목표>
- 클래스(객체)를 분리하는 연습
<4주차 회고>
마지막 주차는 처음 본 미션이라 참고할 수 있는 자료들이 없었기 때문에 더 재밌었다. 오롯이 혼자 요구사항을 분석하고, 기능 목록부터 설계, 구현까지 해보았기 때문에 값진 경험이었다고 생각한다.
2주차 피드백에서 README를 강조한 내용이 떠올라, 이번에는 README를 신경써서 써보고자 했다. 확실히 README를 잘 써놓으니 구현을 하면서 헷갈린 부분을 다시 체크할 수 있고, 협업시에 다른 팀원이 이 프로젝트가 어떤 프로젝트인지 이해할 수 있겠다 라고 느껴, 효율적이고 앞으로의 프로젝트에서도 잘 작성해야겠다고 느꼈다.
요구사항을 읽으며, 대략적으로 구현해야할 기능과 객체 구성을 메모장에 정리하며 설계했다. 요구사항 중, 이 내용을 쓴 이유가 뭔지(예를 들어, 배지는 새해 이벤트에 다시 사용할 예정이다, 새해 이벤트가 있을 예정이다. 등)에 대해 많이 고민해볼 필요가 있다고 생각했다. 그래서 기본적으로 구현되어야하는 기능을 우선적으로 구현하면서, 고민이 필요한 부분에 대해 확장성을 염두해두며 의미를 추측해보았다. 계속 분석하다보니 처음에는 메뉴, 메뉴카테고리, 주문한 메뉴 등의 객체를 만들어서 출력하면 될 것이라고 생각했는데, 추후 뱃지의 활용(확장성)을 위해 ‘고객’이라는 객체를 만들어서 거기에 뱃지를 저장하고 있어야겠다고 생각했다. 그래서 Customer클래스를 만들어 뱃지의 상태를 저장해주었으며, 비즈니스로직을 Customer클래스 안에서 처리할 수 있도록 구현했다.
메뉴, 메뉴카테고리, 뱃지 등은 이미 정해져있는 값이기 때문에 Enum 클래스로 구현했고, 별이 있는 날에 대한 혜택 처리를 위해 날짜를 관리하는 EventDate를 구현했다.
아쉬운 점이 있다면, 제출한 코드에서 ‘혜택’과 ‘증정품’을 하드코딩으로 구현했다.. 혜택이나 증정품은 언제든지 바뀔 수 있고, 재사용성을 위해 추상화 개념을 사용했어야 했던 것 같다. 또한, 크리스마스 디데이 할인, 평일,주말 할인 등을 로또 프로젝트에서 사용한 ‘전략 패턴’을 사용했다면.. 하는 아쉬움이 남는다.(제출하고 보니 참 아쉬움이 많이 남는다.) 추상화, 디자인 패턴 등 개선할 부분에 대해 더 공부할 필요가 있음을 느껴, 프리코스 이후에도 열심히 찾아보고 공부해야겠다.
처음 1주차때는 객체 지향 및 자바의 개념에 대해 이해도가 굉장히 낮았었는데, 4주차가 되고 나서 굉장히 많이 성장했음을 느꼈다. 4주간 바삐 지내면서 몰입하여 프로젝트를 진행했고, 필요한 부분을 공부하며 시간가는 줄 몰랐다. 값진 경험이었고, 앞으로는 이번주에 ‘객체지향의 사실과 오해’ 책을 읽으면서 객체 지향에 대해 더 익힐 것이고, 다시 자바의 필수 개념(추상화, 캡슐화 등)에 대해 체화하는 시간을 1~4주간의 프로젝트를 재구현하면서 가질 것이다. 앞으로 빠르게 성장할 수 있는 기반을 마련해준 것 같아 감사합니다.
- 크리스마스 미션 Repository: https://github.com/Yeongdong/java-christmas-6-Yeongdong