Javascript

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

Jinmidnight 2023. 11. 15. 14:05

4주차 과제를 하기에 앞서 메일을 통해 받은 3주차 공통 피드백을 꼼꼼히 살펴보고자 했습니다.

제 자신이 올바른 방향으로 성장해 나아가고 있는지 객관적으로 확인하고 싶었기 때문입니다.

 

아는 내용이 있어도 복습한다는 마음가짐으로, 구글 docs로 이루어진 3주차 공통 피드백 추가 학습 자료 전부를 면밀히 살펴보고 학습했습니다. 그리고, 헷갈리거나 새로 배운 내용 중심으로 아래 게시글에 정리했습니다.

 

https://jinmidnight.tistory.com/41

 

우아한 테크코스 6기: 프리코스 3주차 Front-End 피드백 정리

우아한 테크코스 6기 프리코스 3주차 과제에 대한 공통 피드백이 주어졌다. 프리코스 4주차 과제를 하기에 앞서, 더 나은 과제 수행을 위해 해당 피드백을 꼼꼼히 살펴보며 정리하고자 한다. 3주

jinmidnight.tistory.com


4주차 과제 코드

https://github.com/jinmidnight01/javascript-christmas-6-jinmidnight01

 

GitHub - jinmidnight01/javascript-christmas-6-jinmidnight01

Contribute to jinmidnight01/javascript-christmas-6-jinmidnight01 development by creating an account on GitHub.

github.com

 

메일에서 강조했던

 

  1. 클래스(객체)를 분리하는 연습

를 중심으로 구현하고자 했습다.

 

1. 클래스(객체)를 분리하는 연습

이번에도 MVC패턴을 기반으로 구현을 진행했습니다. 다만, 데이터를 가지는 객체가 로직을 구현할 수 있도록, Models와 Controllers를 EvenetBenefit 클래스에 Domains 폴더로 한데 모았습니다. 그리고 App.js의 run 메소드에 Domains의 EventBenefit 클래스를 활용해 객체를 생성한 뒤, 객체에 메세지를 보내서 전체 로직을 구현했습니다. InputView와 OutputView 클래스를 통해 모든 입력창과 출력창을 구현했습니다. develop 브랜치에서 주작업을 했고 기능별로 commit했습니다.

 

우선, Domains 폴더EventBenefit(이벤트 혜택 정보) 클래스예외처리에 필요한 Validations 클래스를 생성했습니다. EventBenefit 클래스의 필드는 입력값인 예상 방문 날짜주문목록 2개 구현했습니다. 예외처리에 대한 구체적인 기준 및 내용은 모두 Validations 클래스에 각 함수로 구현했고, 이 함수들을  EventBenefit 클래스의 예외처리 메소드에서 활용했습니다. 마지막으로, 총 주문 금액 연산부터 12월 이벤트 배지 연산까지 이벤트 혜택 상세내역을 위한 모든 메소드를 EventBenefit 클래스 안에 구현했습니다.

 

Views에서는 InputView 클래스와 OutputView 클래스로 나누어 구현했습니다. 입력과 관련한 함수들은 전부 InputView에, 출력과 관련한 함수들은 전부OutputView에서 관리했습니다.

 

전반적으로, 3차 피드백을 반영하여 4차 과제를 수행하고자 했습니다.

 

  1. 함수(메서드) 라인에 대한 기준 15라인을 지키고자 했습니다. 예를 들어, OutputView에서 혜택 내역 메소드를 구현할 때, 크리스마스 디데이 할인부터 증정 이벤트까지 출력해야될 내용이 많다보니 각 할인별로 함수를 분리한 뒤 마지막에 합치는 방식으로 구현했습니다.
  2. 발생할 수 있는 모든 예외 상황에 대해 고민하고자 했습니다. 과제 명세서에 나와있지 않은 예외처리도 꼼꼼히 구현하고자 했는데, 예를 들어 메뉴형식을 정의할 때 '(한글)-(숫자)'로 정의하기도 했습니다.
  3. 비즈니스 로직과 UI 로직을 분리하기 위해서도 고민했습니다. 이 고민 끝에, 비즈니스 로직은 Domains에, UI 로직은 Views에 구현했습니다.
  4. 객체의 상태 접근을 제한하기 위해 필드는 private 클래스로 구현했습니다. 또한, 불필요한 필드를 줄이기 위해 입력값 2개만 필드로 구현했습니다.
  5. 객체를 객체스럽게 사용하기 위해 getter 메소드 이외에도 객체가 일할 수 있는 메소드들을 구현했습니다.
  6. 테스트 코드를 최대한 단위별로 분리하여 구현했습니다. 또한, 성공 케이스 뿐만 아니라 예외 케이스를 모두 구현하고자 했습니다. 마지막으로, 테스트 코드를 구현 코드에서 분리하고자 구현 코드를 먼저 작성한 뒤 테스트 코드를 작성했습니다.

 

2. 소감

우테코의 마지막 과제를 끝내고 나니, 시원섭섭했습니다. 아쉬운 점도 많았고, 이번 학기에 수업을 풀로 듣다 보니 프리코스를 병행하는 것이 확실히 시간적으로 쉽지 않았던 것 같습니다.

 

하지만 그만큼 부족한 점을 깨닫고 개발자로서 성장할 수 있어서 좋았습니다. 구체적으로, 객체가 독립적으로 작동할 수 있도록 리팩토링을 고민한다거나, 직관적인 변수 이름명을 고민한다거나, README에 전체적인 개발 계획을 세워보면서 큰 그림을 그려본다거나, 코드 스타일을 신경쓰며 프로그래밍을 해본다거나, 코드리뷰를 받아본다거나 하는 경험들이 모두 값진 성장의 자산이 된 것 같습니다.

 

앞으로도 이렇게 감사한 경험들을 많이 얻고 싶다는 생각을 하며, 프리코스 한 달 후기를 마무리하고자 합니다.