4주차 미션
매주마다 새로운 미션을 받기 전에 열리는 "코치들과의 수다 타임" 코수타에서 4주차 미션은 역대급으로 어려운 난이도일 것 이라는 이야기를 하셨다.
너무나도 강조를 하셔서 대체 얼마나 어려울까? 하는 생각으로 미션을 받고 README를 열어보았다.
열어본 순간... 😳
4주차 미션은 바로"크리스마스 프로모션" 으로, 이전 미션과는 차원이 다른 수준의 분량이 있었다. 😨
(기능 요구사항이 너무나도 구체적이여서 실제로 크리스마스 이벤트로 생각을 했던 프로모션이 아닐까 생각도 해보았었다 ㅋㅋ 🤣)
기능 목록의 양이 엄청 났던 만큼 전 보다 더욱 꼼꼼히 확인하며 어떤식으로 프로모션이 진행되는지 정리하였고
하나씩 기능 목록을 정리해나갔다.
하나씩 정리하다보니 "할만 하겠는데?"라는 생각이 들었고, 생각했던거 보다 수월하게 구현을 이어나갈 수 있었던 것 같다.
4주차인만큼 지금까지 받은 피드백들과 새롭게 배운점, 아쉬웠던 점들을 이번 미션에 적용하기 위해 노력했고
그 결과 개인적으로 1,2,3 주차보다 훨씬 좋은 결과물이 나왔다고 생각한다.
제출 코드
이전 회고 되돌아보기
2023.10.27 - [◼ 기타] - [우아한테크코스 6기 BE] 1주차 회고 (지난 시간을 돌이켜보며)
2023.11.05 - [◼ 기타] - [우아한테크코스 6기 BE] 2주차 회고 - 자동차 경주 🚘
2023.11.13 - [◼ 기타] - [우아한테크코스 6기 BE] 3주차 회고 - 로또 🎱
마지막 미션인 만큼 새로운 변화를 주다
마지막 미션인만큼 이전 미션들로 부터 배운점들을 총 동원해서 많은 변화를 주려고 해보았다.
기존 방식에서 어떠한 변화를 주었는지에 대해 설명하면 다음과 같다.
도메인 객체에 대한 검증 로직을 해당 검증을 하는 도메인 객체 안에
3주차에는 검증의 책임을 분리하기 위해 입력에 대한 검증과 도메인에 대한 검증을 분리했었다.
그리고 이 검증 로직을 *Validator 클래스로 분리해 검증하도록 하였는데
이번에는 도메인에 대한 검증 로직도 비즈니스 로직의 일부로 생각하여
도메인 객체 안에 검증 로직을 두는 방식으로 구현하였다.
의존성 주입 방식을 사용
기존에는 InputView와 OutputView의 객체 생성을 막고 정적 메소드를 제공했었는데
4주차의 요구 사항에서 별다른 말이 없던 부분은 최대한 건드리지 않도록 하기 위해서
객체를 생성을 허용하고 의존성 주입하는 방식을 사용했다.
클래스 분리에 대해 더욱 깊이 생각하여 단일 책임 원칙을 지킬 수 있도록 클래스들을 많이 분리
이전에도 노력했던 부분이지만, 각각의 클래스들이 자신의 책임을 가질 수 있도록
더욱 클래스를 분리하려 노력해보았다.
그 결과 16개라는 클래스를 만들게 되었고 각각의 클래스들의 네이밍을 통해서도
각각 어떤 역할을 하고 있는지 파악할 수 있도록 하고, 그 역할만을 수행하도록 설계하려 노력해보았다.
클래스들의 패키지 위치에 대해 다시 생각해 보며 패키지를 분리
프리코스에서 사용한 패키지 구조는 "계층형 디렉토리 구조"인데
많은 클래스가 분리되다 보니 domain 패키지 안에 너무 많은 클래스가 모여 있어 가독성이 떨어진다는 느낌이 들었다.
그래서 domain 패키지안에 서로 연관된 클래스들을 order, user 등의 패키지로 묶어 어떤 패키지에 어떤 클래스가 있는지
유추하기 쉽도록 패키지를 분리해보았다.
또한 클래스들이 위치한 패키지가 적합한지에 대해 다시 한번 생각해보며 클래스의 패키지 위치에도 변화를 주어 보았다.
확정성을 염두하고 설계
이전 미션들에서는 이미 공식적으로 정해진 규칙으로 이뤄져있는 게임들이였다고 생각해
확장성을 염두해두고 설계하는 것은 오히려 가독성을 떨어트리는 오버엔지니어링이라고 생각해 확장성을 고려하진 않았었다.
하지만 이번 미션의 경우에는 충분히 확장, 변경 가능성이 있다고 생각했다.
왜냐하면 증정품의 재고가 떨어져 변경될 수도 있고, 메뉴의 가격이 바뀐다던지 등의 변수가 있다고 생각했기 때문이다.
특히 할인 혜택으로 4가지 종류가 있었는데 이를 확장성을 염두해 인터페이스를 고민해 보기도 하였지만
너무 많은 정책들로 가독성이 떨어지진 않을까 고민했었다.
결국 이벤트 할인 정책들을 관리하는 Event Enum 클래스에서 각각의 이벤트 조건 만족 여부와 할인 금액 계산에 대한 부분을 추상 메서드로 선언하고 오버라이딩하여 정책이 추가되거나 변경되어도 다른 클래스들에 지장이 없도록 설계해보았다.
나는 성장했을 까?
4주동안 프리코스를 과정을 달려오고 난 뒤 가장 먼저 드는 생각은 "과연 나는 성장했을까?"이다.
그 동안을 과정을 되돌아보기 위해 지난 회고들과 코드를 보았다.
확실히 나 자신이 프리코스를 시작하기 전과 후로 나뉘는 느낌이 들었다.
프리코스를 시작하기 전에는 객체 지향에 대해 안다고 생각했었다, 하지만 내가 아는 것은 객체 지향의 본질이 아니라
객체에 대한 이론에 대해서만 아는 것이였다.
프리코스를 시작한 후로 객체 지향 원칙에 해당하는 규칙들과 다양한 사람들과 리뷰를 통해 내 코드가 객체 지향적 설계인지에 대해 서로 묻고 답하는 과정에서
객체 지향이 무엇인가? 에 대해 다시 한번 생각할 수 있었고 완벽히 마스터는 못했겠지만 왜 객체 지향적 설계를 고려해야하는가?에 대해 알 수 있었던 뜻 깊은 시간이었다.
필자는 1주차 회고에서 작년 5기에도 지원했던적이 있었다고 말했다.
5기는 5주간 프리코스를 진행했는데 당시에도 나의 모든 시간을 프리코스에 투자하여 몰입했다고 생각했다.
하지만 지금와서 느끼는 건데, 그 때의 몰입은 보여주기식 몰입이었다고 생각한다.
분명 열심히는 했었지만 했다는 것을 보여주려는 느낌이 강했고, 무언가에 깊이 파고 알아보는 과정이 없어서
성장이 부족했었고 탈락했었다고 느낀다.
하지만 이번 6기 때는 프리코스를 하면서 보여주기 식 몰입이 아닌, 그냥 내가 재밌어서 몰입하게 되었다.
궁금한 것이 생기면 그에 대해 깊이 알아보고 그 과정에서도 재미를 느끼고
다른 사람들과 코드리뷰도 활발히 해보면서 많은 점을 배우고 느끼고 토론도 해보고하는 등
같은 프리코스지만 작년과는 정말 차원이 다른 방법으로 몰입하여 임한것 같다.
프리코스를 진행하면서 회고에 대해서도 다시 한번 생각할 수 있었다.
원래는 회고를 작성할 시간에 다른 내용을 공부할래라는 식으로 회고를 중요하게 생각하지 않았었다.
하지만 이번에 회고를 통해 지난 과정을 되돌아 보니 마치 일기장처럼
어떤 과정을 겪어왔고 어떤식으로 성장했는 지 등 나 자신을 돌아볼수있다는 점에서 매력있게 다가왔다.
앞으로도 회고도 작성해보며 과거와 현재를 비교해볼 수 있도록 해볼 예정이다.
이제 1차 합격자 발표만을 기다리고 있다.
지난 1년간 개발에 대한 열정으로 정말 열심히 공부해왔고 이 몰입을 통해서 나의 스토리도 많이 생겨
우테코 자소서에도 쓰고 싶은 말이 많았다.
천 자 제한 때문에 하고 싶은 말을 모두 담진 못했지만 일주일 동안 쓰고 지우기를 반복하면서
질문 주제에 충실하게 답할 수 있도록 최대한 작성하려 노력했었다.
4주간 미션 또한 작년과는 차원이 다르게 임하면서 몰입했기 때문에 이번에는 기대를 해보고 싶다..
비전공자이기 때문에 같은 목표를 가지고 공부해올 동료가 없어 항상 혼자 공부해오던 내가
이렇게 같은 목표를 가지고 열정넘치는 사람들과 함께 지식을 공유하고 같이 공부해나가는 것이 너무나도 재밌어서
함께하는 즐거움을 느낄 수 있었다.
그렇기 때문에 더더욱 우테코 합격에 대해 간절하지 않을 수 없다.. 😥
1차 합격 결과가 어떻게 될 진 모르지만, 합격 후 최종 코테까지 5일이라는 시간밖에 없기 때문에
지난 기수들의 최종 코테 문제들을 5시간안에 풀어보는 연습을 해보려 한다.
다음 포스팅은 최종 코테 후기가 되었음 좋겠다!
'◼ 우아한테크코스' 카테고리의 다른 글
[우아한테크코스 6기 BE] 최종 합격 후기 (+ 주관적인 팁) (66) | 2023.12.28 |
---|---|
[우아한테크코스 6기 BE] 긴장감 넘쳤던 최종 코딩 테스트 후기 (45) | 2023.12.18 |
[우아한테크코스 6기 BE] 3주차 회고 - 로또 🎱 (3) | 2023.11.13 |
[우아한테크코스 6기 BE] 2주차 회고 - 자동차 경주 🚘 (1) | 2023.11.05 |
[우아한테크코스 6기 BE] 1주차 회고 (지난 시간을 돌이켜보며) (31) | 2023.10.27 |