-
우테코 프리코스 4주차 과제 소감비밀 2023. 11. 20. 11:57
이번주 과제를 진행하면서 지금까지 프리코스를 진행하며 얻은 지식들을 최대한 활용하려고 노력하였습니다. 학습과정에서 여러 블로그와 개발자 분들의 토론내용, 그리고 무엇보다도 가장 좋은 학습과정은 깃헙의 좋은 코드를 분석해가며 왜 이렇게 작성하였는지 이유를 찾는 것이었습니다. 그 이유를 찾아가며 학습을 진행하고 코드에 적용하면서 내 것으로 만들 수 있었습니다. 이번 프로젝트는 MVC구조를 사용하여 컨트롤러 뷰 도메인이 상호작용하도록 설계하였습니다. 그리고 이번주차 미션의 학습목표인 클래스를 분리하는 연습에 최대한 초점을 맞추었습니다. 클래스를 분리하다 보니 각 클래스의 역할에 대한 생각을 오랫동안 하고 하나의 클래스가 그 클래스에 관련된 기능들만을 수행하여 단일 책임 원칙을 지키고 클래스 내 응집도를 높히도록 하였고, 상위 클래스와 하위 클래스의 일관된 책임 관계를 주려고 하였습니다. 이에 대한 학습 과정에서 좋은 코드란 작은 모듈로 나누어져 있어 각 모듈은 독립적으로 동작할 수 있어야 한다는 말이 깊게 와 닿았습니다. 다른 서비스나 이벤트가 추가될 경우 모듈화 되어 있는 코드가 쉽게 변경 및 업데이트가 가능하므로 모듈화 된 프로젝트 설계를 하려고 노력하였습니다. 하나의 역할을 수행하는 클래스 내의 기능들을 구현할 때 테스트 코드를 작성하고 통과할 수 있도록 메소드를 작성하였고, 3주차 피드백 내용처럼 실패의 경우에 대한 테스트 코드도 작성하였습니다. 메소드는 한 가지 역할만 수행하도록 작성하였고, 테스트 통과 이후 기능에 대한 커밋을 진행하며 커밋메시지 컨벤션을 지키려고 노력하였습니다. 과제를 진행하면서 많은 리팩토링을 진행하였는데, 역할의 분리에 따른 클래스의 분리가 가장 주된 이유였습니다. 원래는 하나의 클래스에서 수행하던 역할을 구분하여 각각의 클래스에 역할을 부여해 코드가 구조적으로 변하고, 테스트코드 작성 또한 수월해짐을 느낄 수 있었습니다. 리팩토링 이후에는 테스트코드가 잘 작동하는지 검사함으로써 단위 기능에 대한 리팩토링이 정상적으로 수행되었는지 확인할 수 있었습니다.
각 클래스의 역할에는 유효성 검증도 있었는데, 이떄 발생할 수 있는 예외 상황을 생각하여 예외에 대한 처리를 클래스 내에서 하도록 하였습니다. 입력에 있어 확인할 수 있는 입력 형식에 대한 예외처리는 파싱과정에서 에외를 발생시키고, 도메인과 관련한 예외는 도메인 클래스 내부에서 담당하도록 하여 단일 책임 원칙을 지킬 수 있도록 하였습니다.
혜택 여부를 판단하는 클래스와 혜택 금액을 계산하는 클래스를 분리하여 각각의 역할에 집중할 수 있도록 하였습니다. 혜택서비스(BenefitService)는 날짜와 주문 정보를 기반으로 혜택정보를 얻는 데에 역할을 부여하였고, 메인 서비스(MainService)는 추후 판매금액 달성 여부와 이벤트 참여 조사를 위해 방문 정보를 가지는 객체를 저장하고 조회할 수 있는 기능을 구현하였습니다. 또한, 저장을 마친 후에는 방문 내역 정보를 출력을 위한 DTO로 반환하는 역할을 부여하였습니다.
테스트 코드를 작성할 때는 많은 예외상황을 고려하며 매개값을 변화시켜가며 테스트를 실행하였고, 특히 경계값이 있는 경우 경계값 주변에서 잘 동작하는지 확인하였습니다. 3주차 미션 피드백에서 테스트 코드도 코드라는 피드백을 받고 테스트코드도 최대한 의미를 가지고, 잘 알아볼 수 있도록 작성하였습니다. 메뉴와 혜택에 쓰이는 정보들을 하나로 묶어 관리할 수 있도록 Enum을 활용하였고, 효과적으로 데이터를 관리할 수 있었습니다. 이 과정에서 Enum활용을 체화할 수 있었습니다
이메일 형식으로 주어진 미션과제에서 여러번 정독하며 과제의 목적을 파악하였고, 빠뜨린 기능이 없는지 재차 확인하며, 리팩토링을 진행하였습니다. 중간에 할인과 혜택을 구분하지 않고 프로젝트를 진행하여 잘못 구현된 기능들이 있었는데, 다시 한번 요구사항 정독의 중요성을 느낄 수 있었습니다. 구현 기능을 모두 체크한 후에는 이벤트 목표를 생각하며 추후에 방문 정보를 활용할 수 있도록 저장소를 구현해보았습니다. 4주차 미션을 수행하면서 미션 내 구현 기능에 다양한 기능들이 있고 각각의 기능들이 비슷한 역할들이어서 기능에 대해 더 깊이 생각하며 클래스 분리의 중요성을 느낄 수 있었고, 최종적으로 기능 구현을 마친 이후에도 좋은 코드란 어떤 코드일까 계속 생각하고 정보를 찾아 공부해가며 기나긴 리팩토링의 과정을 거쳤습니다. 리팩토링 과정을 거치며 테스트 코드 작성과 구현 기능 목록 문서 업데이트의 중요성도 느낄 수 있었습니다. 리팩토링 과정에서 주로 생각 한 것은 가독성 그리고 효율성입니다. 자원을 효율적으로 사용하는지, 그리고 다른 사람이 쉽게 이해하고 수정할 수 있을지 고민하였습니다. 이번 과제도 각 기능을 구현하며 필요한 지식들을 공부하고 체화할 수 있는 감사한 기회였습니다.'비밀' 카테고리의 다른 글
우테코 프리코스 2주차 과제소감 (0) 2023.11.20 우테코 프리코스 3주차 과제 소감 (0) 2023.11.20