우아한 테크코스 6기 프리코스 4주차 회고

지송·2023년 12월 6일
0

안녕하세요!
벌써 4주차에 접어들었어요
이제 프리코스에 대한 글을 적는 것도 이번이 마지막이 아닐까 하는 생각이 듭니다
좀 더 잘할 수 있었을까? 하는 생각에 아깝기도 하면서
사실 저는 최선을 다했기 때문에! 아주 후회는 하지 않아요
하지만 아쉽기도 하고... 이제 더 이상 메일이 오지 않는다는 생각에 섭섭하기도 하네요

https://github.com/woowacourse-precourse/java-christmas-6

이번 주차 과제는 이러한데요 이번에는 공개 포크 및 PR을 거치는 방식이 아니라
비공개 저장소로 생성하고 collaborator로 초대하는 방식이에요
제가 최근 주말에 잠실을 다녀왔는데 벌써 크리스마스 분위기가 가득이라 좋더라고요
근데 과제도 크리스마스로 나오니까 반갑고 좋은 생각입니다 ㅎㅎ

< 2023.11.13 월요일 >

이번 주에도 역시 월요일부터 시작하게 되었습니다... ㅎㅎ
저번 주차의 결심에 따라 조건부터 상세히 정리하고 플로우 차트 그리려고 합니다

  • 과제 저장소 생성하고 콜라보레이터 초대하기
  • 조건 파트 작성하기
  • 플로우 차트 그리기
  • 구현 파트 작성하기

1. 과제 저장소 생성하고 콜라보레이터 초대하기

실수한 건 없는지 몇 번이나 더블 체크하고 이번에는 메인 브랜치를 사용해야 한다는 점!

클론까지 완료

2. 조건 파트 작성하기

제가 조건 파트를 너무 꼼꼼히 분석하는 건지 시간이 많이 걸리는 느낌입니다
최대한 20분 안으로 끝낼 수 있게 노력하는 게 중요할 것 같네요 ㅎㅎ...
그래도 완벽하게 빠진 조건 없이 분석 완료!
조건 파트를 먼저 작성하니 플로우 차트 그리는 게 더 수월할 것 같아요~

3. 플로우 차트 그리기

플로우를 짜면서 어떤 클래스를 나눌지 고민해 보고

4. 구현 파트 작성하기

사실 전 이 파트 정리할 때도 진짜 오래 걸립니다
흐름에 따라 적절한 클래스와 필드
어떻게 사용할지 머리로 그리면서 사실상 설계도 완성을 하고
코드 작성 시에는 고민없이 짜둔대로 하면서 어색한 부분은 없는지 체크하고
조립하다 이상한 부분이 있으면 조금씩 수정만 하며 진행하기 때문에!
이 부분에서 머리를 다 쓰고 있어요
초기 시안에서는 DAY 클래스를 따로 안 주었는데
각종 메시지를 던지고 받으려면 꼭 필요할 것 같아서 하나 만들어 주었습니다
이로서 이번에도 getter와 setter 사용을 지양하며 짤 수 있을 것 같아요

  • DAY 구현하기
  • DayException 구현하기
  • DAY 테스트 코드 작성

아자아자 또 코드 짜기 시작합니다
제 설계가 코드로 탄생하는 순간은 늘 설레고 빨리 짜고 싶어요
(마무리도 하고 싶을 수도)

5. DAY 구현하기

메시지를 주고받기 위해 여러 함수를 작성한 파트입니다!
특별히 어려움은 없었어요

6. DayException 구현하기

위 항목과 같이 구현하였습니다
중간에 to day exception으로 마무리하는 커밋로그가 그것!

7. DAY 테스트 코드 작성

  • 날짜를 주고 얼마나 지났는지 잘 나오는가
  • 날짜를 주고 요일이 잘 나오는가
  • 크리스마스가 아닌 날에 아니라고 나오는가
  • 크리스마스가 맞는 날에 맞다고 나오는가
  • 1보다 작은 날짜를 주면 예외가 발생하는가
  • 1보다 큰 날짜를 주면 예외가 발생하는가

를 테스트 해 보았습니다!

< 2023.11.14 화요일 >

오늘 코드를 잘 마무리하기 위해 찜닭도 시켜먹었고요 (핑계 맞음)
이제 열심히 작성해 보겠습니다!

  • MENU 구현하기
  • MENU 테스트 코드 작성
  • EVENT 구현하기
  • EVENT 테스트 코드 작성
  • MENU 추가 구현하기
  • MENU 추가 테스트 코드 작성
  • PLANNER 구현하기
  • PlannerException 구현하기
  • PLANNER 테스트 코드 작성
  • InputView 구현하기
  • InputException 구현하기
  • OutputView 구현하기
  • christmasController 구현하기

1. MENU 구현하기

코드 작성할 때마다 느끼는 건데 stream은 정말 신이에요
잘 활용하면 훨씬 깔끔하고 간단한 로직으로 구현 가능함...

2. MENU 테스트 코드 작성

테스트 진행하다가 잘못 작성한 부분을 발견해서 바로 수정해 주었습니다

  • 메뉴가 맞는 걸 주고 true가 나오는지 테스트
  • 메뉴가 아닌 걸 주고 false가 나오는지 테스트
  • 음료만 있는 리스트를 주고 true가 나오는지 테스트
  • 다른 메뉴도 섞인 리스트를 주고 false가 나오는지 테스트
  • 메뉴와 수량을 주고 정확한 가격이 나오는지 테스트

하는 함수를 작성해 주었습니다

3. EVENT 구현하기

작성하다 보니 menu에서 추가로 작성해야 되는 함수가 떠올라서
리드미 문서에 추가하고
또 planner에 있던 기능을 여기로 옮겨야 캡슐화가 유지될 것 같아서
해당 부분을 유지하기 위해 옮겨주었습니다!
함수가 상당히 많이 작성되었습니다 ㅎㅎ

4. EVENT 테스트 코드 작성

각 케이스에 대해서 참 거짓인 경우를 나누어 테스트하였고
뱃지와 예상 결제 금액의 경우 하나씩의 테스트만 진행하였습니다!
테스트 개수가 꽤 많아서 반복 노동처럼 느껴졌던 ㅎㅎ...

5. MENU 추가 구현하기

event에서 사용하기 위한 함수들을 추가 구현해 주었습니다!

6. MENU 추가 테스트 코드 작성

위 함수에 따라 추가 테스트 코드를 작성하였습니다

7. PLANNER 구현하기

머리에 담은 설계는 있는데 이걸 어떻게 활용해야 될지 감이 안 와서
한 함수에 쭈욱 담은 뒤에 리팩토링하는 과정을 거쳤습니다
어렵네요... ㅠ

8. PlannerException 구현하기

이번 주차 미션은 평소보다 조금 더 복잡해서 그런가
시간이 2배로 걸리는 기분이에요
저녁 전에는 끝날 줄 알았는데 새벽에야 겨우 끝날 것 같... ㅠㅠ
그래도 마지막 불꽃을 태워봐야죠!

9. PLANNER 테스트 코드 작성

테스트 코드를 작성하다가 또 잘못 작성한 함수를 발견했습니다
따봉 테스트 코드야 고맙다

  • 이벤트 적용이 안 될 때 결과
  • 이벤트 적용이 될 때 결과
  • 중복된 메뉴를 입력했을 때 예외
  • 존재하지 않는 메뉴를 입력했을 때 예외
  • 음료만 주문했을 때 예외
  • 메뉴를 1개 이상 주문하지 않았을 때 예외
  • 메뉴의 총합이 20개를 넘을 때 예외
    를 테스트해 주었습니다!

10. InputView 구현하기

이제 슬슬 끝이 보여서 기쁩니다...

11. InputException 구현하기

예외 상황들은 패턴을 통해 해결해 주었어요!
우테코 프리코스를 통해 아주 유용하게 쓴 게 stream과 패턴입니다 ㅎㅎ
테스트 코드도 잘 작성하는 버릇이 생긴 것 같아요

12. OutputView 구현하기

드디어! 프린트하는 로직도 다 짰어요~

13. christmasController 구현하기

떨리는 순간입니다... ㅎㅎ
이제 실행해보고 올게요!

수많은 fix 과정을 거쳐서 무사히 개발을 끝냈습니다...!
이제 프리코스가 끝난다니 너무너무 아쉬워요

  • 규칙 준수 확인하기
  • 깃허브 1차 제출
  • 지원서에 2차 제출
먼저 어느덧 4주차가 끝났다는 게 믿기지가 않아서 아쉽고 섭섭한 생각이 큽니다
당장 목요일에 오는 메일을 기다리게 될 것 같다는 생각이 듭니다
4주간 스스로 많이 발전했다는 것을 많이 느끼고는 하는데
마무리를 하며 1주차의 코드부터 다시끔 살펴보았습니다
그때도 일주일간 최선을 다하여 코드를 짰지만
지금 보니 또 부족한 부분이 보여 아쉽기도 하면서
그래도 스스로 떳떳하게 열심히 했다 생각하여 후회는 없습니다
설계에 공을 들이며 더 깔끔한 코드를 짜고자 여러 객체지향적인 코드를 짜고자 노력하였는데
어느정도까지 왔는지는 모르겠지만 적어도 시작전보다는 훨씬 발전했다 자부할 수 있을 것 같습니다
MVC 패턴으로 코드를 짜고 함수를 작은 단위로 나누어 작성하고 테스트 코드를 작성하고
기능 단위로 커밋을 하고 getter setter를 사용하지 않고
(개인적으로 가장 어려운 파트였습니다
설계부터 다시 해야 돼서 몇 번이나 갈아엎었던 것 같습니다
메시지를 주고받는다는 개념을 온전히 이해하기 까지 많은 어려움이 있었던 것 같네요...)
코드를 작성한 후에도 리팩토링을 진행하고...
모든 것들이 도전이었지만 어느덧 조금은 체화된 것 같다는 느낌이 듭니다!
프리코스가 아닌 정식으로 테크코스에 참여하여
더 큰 발전을 도모하고 싶다는 욕심이 커지게 되어
간절한 마음이 배가 된 것 같습니다
설계의 중요성은 알았지만 코드 작성하기 바빠 생략한 적이 많은데
프리코스를 진행한 후 사실 개발자의 기본은 설계가 50%는 되는 것 같다는 생각이 들었습니다
ChatGPT 시대가 오며 단순한 코더들은 살아남기 힘든 세상에서
개발자들의 몫은 설계가 아닐까 더 나은 구조 더 나은 코드 리팩토링이 아닐까 생각을 해 보면서
코드 작성에 바빠 설계에 소홀히했던 스스로를 반성한 시간이기도 했습니다
조건 파트를 꼼꼼히 작성하고 플로우 차트를 그리고
구현 파트에서 클래스, 함수, 필드의 틀을 잡고
퍼즐을 맞추듯 코드를 작성하는 경험이 무척이나 즐거웠습니다!
한달동안 이러한 경험을 하게 해주셔서 감사합니다
앞으로도 더욱 협업하기 원활한 유지보수가 용이한 설계하는 개발자가 되도록 노력하겠습니다
profile
💻 늘 공부하고 발전하는 개발자

0개의 댓글