우아한테크코스 프리코스 4주차 후기

Y·2023년 11월 16일
0

우테코 프리코스

목록 보기
4/4

우아한 테크코스 프리코스 4주차

4주차 미션 깃허브

이 앞 주차에 비해서 난이도가 높은 과제였던 것 같다. (예외 상황 정리하는 것만도 한참이 걸렸던 것 같다.) 어쨌든 이번 주차에서 고민하고 적용했던 부분은 다음과 같다.

  • TDD
  • 인터페이스
  • DTO/Domain 객체 생성

이 정도로 정리할 수 있을 것 같다.

TDD

이번 주차는 워낙 요구사항이 복잡하고 정리가 한 번에 되지 않아서, 그리고 TDD를 한 번은 적용해보려고 하고 있었어서 TDD를 적용해서 개발을 진행했다. 처음에 Controller부터 했더니 정말 불편했는데.. TDD를 적용하려면 작은 단위부터 시작해서 구현하는 게 맞는 것 같다. 어쨌든 개발을 하면서는 불편하고 속도가 너무 안 난다는 느낌을 계속 받기는 했지만, 막상 끝나고 나니 테스트 코드 한번에 돌려보고 수정해야할 부분을 바로바로 찾을 수 있어서 편하기도 했다. 익숙해지면 편할 것 같긴한데 얼마나 활용할지는.. 아직은 잘 모르겠다.... 개인적으로는 생산성이 떨어진다는 느낌을 많이 받기는 했다..🥲

인터페이스

할인의 종류가 여러가지여서, 인터페이스를 생성한 후에 구현체를 생성했다. 정말 많은데 크게 나누면 1)금액 할인 및 혜택액 증가, 2)혜택액 증가 및 상품 증정, 3)뱃지 증정 크게 3가지로 나눌 수 있어서 인터페이스를 이 3개로 생성하고, 각 유형에 따른 구현체를 생성했다. 그러면 각 구현체에 대해서 이벤트 대상인지 확인하고, 대상이라면 할인을 진행해주면 되는데 각 구현체를 어떻게 전부 받아오지?에 대한 고민이 생겼다. 그래서 각 구현체를 모아서 registry하는 객체를 따로 생성했는데, Component scan이 이런 개념이겠구나라는 생각을 하게 됐다. 물론 나는 수동으로 List에 클래스를 저장해서 불러오는 방식이긴 했지만... 좀 더 깔끔한 구현이 궁금해져서, IoC 컨테이너 관련 공부를 더 해볼까 싶다.

DTO/Domain 객체 생성

결과값에 필요한 정보값이 너무 많았다. 처음엔 HashMap으로 통째로 관리했는데, 코드가 길어지고 가독성이 너무 떨어져서 결국 객체를 새로 생성했다. 그런데 결국 값을 저장하고 출력하기 위한 객체이다 보니 get/set이 필요했는데, 어떻게 해결할 수 있을지 고민하다가.. domain 객체에서 set의 경우에는 setter로 직접 값을 넣어주는 것보다는 update와 같은 메서드명을 사용해서 클래스 내부에서 필요한 만큼 값을 업데이트 해주는 방식을 사용했다. getter의 경우 Collections.unmodifiable~을 활용했고 (int 형식 같은 경우에는 다른 방법이 없어서 그냥 return해줄수밖에 없었다. DTO 객체에는 set의 역할을 하는 메서드는 없고, get의 경우 아예 출력형식에 맞춘 string 값을 반환해주는 것으로 구현했다. getter/setter을 지양해서 구현하는 게 정말 어려운 것 같다..

4주간의 우테코 프리코스가 드디어 끝이 났다. 그동안 이래저래 바쁜 일이 많았던 바람에 아쉬운 점도 많았지만, 프리코스를 진행하면서 정말 많은 것들을 배운 것 같아서 뜻깊다!

profile
개발자, 학생

0개의 댓글