철학과 학생의 개발자 도전기

[우테코 6기] 웹 백엔드 - 프리코스 4주차 본문

우테코

[우테코 6기] 웹 백엔드 - 프리코스 4주차

Younghun 2023. 11. 16. 20:43

4주차 과제

크리스마스 프로모션 기능을 구현하는 과제였다.

요구사항이 더 복잡하기 때문에 클래스를 분리하는 것도 까다로웠다.

하지만 어려운 만큼 OOP에 대해 숙달하는 좋은 훈련이 되었다.

https://github.com/happyhun/java-christmas-6-happyhun

 

GitHub - happyhun/java-christmas-6-happyhun

Contribute to happyhun/java-christmas-6-happyhun development by creating an account on GitHub.

github.com


회고

요구사항 분석

요구사항이 길고, 제약 조건이 많아지면서 분석에 어려움을 겪었다. 하지만 쉬운 작업부터 분리해 내고 어려운 작업을 분석하니 구현할 기능을 깔끔하게 정리할 수 있었다. 우선 복잡한 로직이 없는 입력과 출력부터 분리해서 분석했다. 입력은 예외 처리 조건도 세세히 정리했다. 그리고 출력에 필요한 값을 계산하는 로직과 이벤트 목록을 정리하여 놓치는 부분 없이 꼼꼼하게 구현할 수 있도록 문서로 작성했다.

클래스 분리

분석한 기능 요구사항을 바탕으로 클래스를 분리하는 작업을 시작했다. 처음부터 전체 구조를 완벽하게 설계하기는 어려웠다. 그래서 우선 UI 로직과 도메인 로직을 분리하고 입력 및 검증 클래스부터 설계했다. 필요한 정보를 모두 입력받은 후에 수행할 로직을 살펴보니 크게 2가지로 분리되는 것을 알 수 있었다. 금액을 계산하는 로직과 이벤트를 적용하는 로직이다. 그러나 혜택 내역을 확인하는 로직은 개별 이벤트를 모두 적용해야 하는 큰 작업이어서 별도의 클래스로 만들었다. 그 결과 UI, 검증, 금액 계산, 이벤트 적용, 혜택 내역 확인, 이벤트 플래너 진행이라는 6가지의 큰 단위로 분리해서 코드를 짤 수 있었다.

종합 회고

구현해야 기능을 목록화하고, 비슷한 기능끼리 분류해서 클래스로 분리하는 작업은 어려운 일이었다. 하지만 클래스가 하나의 책임을 가지도록 분리하고, 기능마다 단위 테스트로 철저히 검증하니 개별 클래스의 코드 신뢰성이 높아졌다. 마지막에 클래스를 하나로 조립할 , 불안함보다는 기대감이 생겼다. 부분이 정확히 동작한다는 보장이 있으니, 전체를 조립한 후에도 원하는 대로 동작할 것이라는 기대였다. 기대한 대로 전체 로직도 동작했고, 객체들이 유기적으로 협력하는 것을 보면서 객체지향의 매력도 느낄 있었다. 프리코스를 통해 배운 OOP 정수는 앞으로의 개발 경력의 좋은 자양분이 것이다.