Home 프리코스 4주차 및 프리코스 전체 회고
Post
Cancel

프리코스 4주차 및 프리코스 전체 회고

[프리코스 4주차 미션 링크] https://github.com/woowacourse-precourse/java-christmas-6

[제출 코드 링크] https://github.com/ldhapple/java-christmas-6-ldhapple/pull/1

프리코스 4주차

4주차 문제는 크리스마스 프로모션입니다.

이용자에게 방문 일자, 예상 주문 메뉴에 따른 이벤트 적용을 요약해서 보여주는 프로그램을 구현하는 문제입니다.

이전 문제들과는 다르게 이메일 형식으로 문제가 제출되어 요구사항을 파악하는데 시간을 많이 투자해야 했습니다.

4주차 미션의 목표는 3주차 미션의 목표에 이어 클래스 분리에 대해 더 깊게 고민해보는 것 입니다.

아래는 3주차 미션에 대한 공통 피드백입니다.

  • 메서드 라인에 대한 기준
    • 공백라인 포함 메서드가 15라인이 넘어간다면 메서드 분리를 위한 고민을 해봐야 한다.
  • 발생할 수 있는 예외상황에 대해 고려한다.
  • 비즈니스 로직과 UI 로직을 분리해야 한다.
    • 단일 책임 원칙에 위배될 수 있다.
    • 현재 객체의 상태를 보기 위한 로그 메시지 성격이 강하다면 toString()을 통해 구현하자.
    • View에서 사용할 데이터라면 getter 메서드를 통해 데이터를 전달하자.
  • 연관성이 있는 상수는 static final보다 Enum을 활용하자.
  • final 키워드를 사용해 값의 변경을 막자.
  • 객체는 객체스럽게 사용하자.
    • 객체를 어떠한 데이터를 담는 용도로만 사용하지 말자.
    • 객체에서 데이터를 꺼내지 말고 메시지를 던지도록 구조를 바꾸어 데이터를 가지는 객체가 일하도록 해야 한다.
  • 테스트를 위한 코드는 구현 코드에서 분리되어야 한다.
  • 단위 테스트하기 어려운 것을 클래스 외부로 분리하는 시도를 하자.

구현

4주차 미션은 어떤 기능을 구현해야 할 지 비교적 명확하지 않았고, 그만큼 고려해야할 부분이 많았습니다. 예를 들면 현재 12월 이벤트에 대해 구현하고 있으나, 이 이벤트는 1월 새해 이벤트까지 고려되어 진행중이기 때문에 현재 이벤트에 대한 정보를 저장하도록 구현해야 하는가 등에 대한 고민이 있었습니다.

그리고 이러한 부분때문에 12월이라는 부분도 추후 변경될 수 있는 사항으로 생각하고 확장성을 고려하며 구현을 해야 했습니다.

구현을 하다보니 존재만 알았던 DTO가 이 때 필요하겠구나를 느낀 부분이 있었고, 이 부분을 계기로 DTO에 대해 학습하고 DTO를 적용하게 되었습니다.

전체적으로 구현이 어려웠지만 재미있었습니다. 1~3주간의 학습의 결실을 맺는 느낌의 난이도였지만 그런 난이도인 만큼 구현하는데 있어 그간에 학습했던 지식이 도움이 많이 되는 것을 느꼈기 때문입니다.

아쉬웠던 부분

  • 확장성을 고려해 설계했지만 놓친 부분이 많았다.
    • 특히 할인 정책.
  • 객체 분리를 더 했어야 좋았을 부분도 놓쳤다.
    • 하나의 클래스에 로직이 과하게 많아짐을 느꼈다.
  • Enum에 함수형 인터페이스를 사용함에 있어 입력 값을 강제할 수 없어 안정성이 떨어지는 문제.
  • getter 사용을 줄일 수 있었을 것 같은데 줄이지 못했다.
  • 중복되는 메서드를 매개변수를 이용한 방식으로 합칠 수 있었다.
  • 날짜와 관련된 부분은 Java에서 제공하는 것을 이용해도 좋았을 것이다.

소감

이전 3주차에 객체와 메서드의 분리 그리고 네이밍에 신경을 많이 썼었습니다. 그런데 코드 리뷰를 받아보니 놓친 부분이 꽤 있었습니다. 사실 배움의 단계이다보니 완벽하게 하기란 불가능에 가깝지만 놓치지 않을 수 있던 부분이 있음에도 그 부분들을 놓친 것이 아쉬웠습니다. 그래서 이번 4주차 미션에서는 최종 미션인만큼 1~3주차에 받았던 모든 피드백을 정리해보고 꼼꼼하게 체크해보려 노력했습니다.

기능목록을 정리하면서 입력값에 따라 생성되는 객체는 적지만, 이전 주차들과 다르게 다뤄야할 객체가 많다는 것을 느꼈습니다. 그래서 이전에는 기능 구현에 우선 집중하고 리팩토링을 하는 방식으로 진행했었는데 이번 주차는 여러 피드백들을 통해 얻은 지식이 있었고, 3주간의 경험이 있었기 때문에 기능 구현을 하는 중에도 처음부터 객체의 분리와 같은 부분을 신경썼습니다. 구현 자체에는 시간이 훨씬 많이 걸렸지만, 리팩토링 과정에서 구조를 크게 바꾸지 않아도 되었습니다.

이번 프리코스 기간을 통해 많은 것을 배웠고, 3주간의 배움을 4주차에 쏟아낸 느낌이었습니다. 명확한 객체 분리의 장점에 대해서도 느꼈습니다. 모든 기능 구현이 끝난 후 10,000원 미만의 주문은 이벤트가 적용되지 않는 것을 구현하지 않았다는 걸 뒤늦게 알게 되었는데 이러한 기능 추가에 있어서도 코드를 크게 고칠 필요가 없었습니다. 프리코스 이전의 제 코드가 이렇게 어떠한 기능 구현을 누락한 채로 구현했다면 수정에 정말 많은 시간이 걸렸을 것이라고 생각합니다.

이 외에도 DTO, record 등 학습하며 마지막 4주차까지 성장할 수 있는 기회가 되었음을 느꼈습니다. 그럼에도 여전히 아쉬운 부분이 있지만 차차 개선해나가면 될 것이라고 생각합니다. 이렇게 부족한 부분을 파악할 수 있어 좋았습니다.

프리코스 전체 후기

이 미션을 끝으로 4주간의 프리코스가 모두 마무리 되었습니다. 프리코스를 진행하면서 제가 그간 프로그래밍 학습을 하면서 방향성이 조금은 잘못되었을 수도 있다는 것을 고민해볼 수 있는 기회가 되었습니다.

프리코스는 저에게 개발에 대한 방향성에 어떠한 확신을 주었습니다. 프리코스를 함께한 수천명의 사람들도 비슷한 느낌을 받았으리라 생각합니다. 개발자로서 무엇이 우선되어야 하는지 고민해볼 수 있었습니다.

이렇게 프리코스를 진하게 경험해보니 우테코에 더더욱 합격하고 싶다는 생각이 들었습니다. 이러한 학습 방식은 처음 경험해보았고, 이러한 방법이 나한테 맞고 효율적이라는 사실도 알게 되었기 때문입니다.

물론 탈락하더라도 아쉽지만 어쩔 수 없습니다. 지원서와 프리코스 미션에는 최선을 다 하기도 해서 후회가 없고, 이 4주의 시간은 취업을 위해 공부하고 있던 기간이었는데 프리코스 4주간의 시간을 투자한 것이 후회되지 않을 정도로 충분히 많은 것을 얻었습니다.

만약 누군가 우테코 프리코스 참가에 고민을 한다면 무조건 해보라고 권하고 싶습니다. 이전에 객체지향에 대해 충분히 경험하고, 학습했던 사람 혹은 컴퓨터 프로그래밍 언어와 전혀 친하지 않고 이제 막 입문하는 사람 정도를 제외하고는 4주간의 기간동안 얻을 수 있는게 많다고 생각합니다.

추천할만큼 정말 좋은 경험이었고 4주로 끝나는 것이 아쉬울 정도였습니다. 합격해서 이러한 경험을 더 해보고 싶다는 생각이 듭니다.

일단 앞으로 남은 시간 결과를 기다리며 코딩 테스트나 그간 못했던 스프링 복습/인강 등등 공부해야할 것 같습니다.

프리코스 꼭 추천합니다!

This post is licensed under CC BY 4.0 by the author.