Welcome! Everything is fine.
[AOS] 우아한테크코스 6기 프리코스 4주차 회고 : 크리스마스 프로모션 본문
📌 우아한테크코스 프리코스 완주👏🏻
드디어 4주간의 길다면 길고, 짧다면 짧은 몰입이 끝났다! 포기하지 않고 완주하는 것을 목표로 시작했는데 달성하게 되어서 기쁘다. 대망의 마지막 미션은 모두의 예상을 뒤엎고 '크리스마스 프로모션'이라는 제목의 길고 긴 요구사항이 있는 미션이었다. 이메일 형식으로 된 긴 요구사항이 스크롤을 내리고 내려도 끝나지 않아 속으로 '오..마이..갓..!'을 외쳤다.😂 실제로 업무를 하는 것 같은 이메일 형식이라 굉장히 흥미롭긴 했다. 이번 4주 차 미션은 평소보다 긴 요구사항을 보고 조금 겁먹은 채로 시작했지만, 그렇기 때문에 그 과정이 더 보람찼다!
📌 추가된 요구사항
- 아래 있는 InputView, OutputView 클래스를 참고하여 입출력 클래스를 구현한다.
- 입력과 출력을 담당하는 클래스를 별도로 구현한다.
- 해당 클래스의 패키지, 클래스명, 메서드의 반환 타입과 시그니처는 자유롭게 구현할 수 있다.
class InputView {
fun readDate(): Int {
println("12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!)")
val input = Console.readLine()
// ...
}
// ...
}
class OutputView {
fun printMenu() {
println("<주문 메뉴>")
// ...
}
// ...
}
📌 기능 목록
이번 기능 목록은 다 캡쳐하기엔 좀 길어서 PR 주소를 가져왔다. (혹시라도 리뷰를 해주신다면..감사하겠습니다.🙌🏻)
📌 미션 과정
🛠️ 코드를 나누고 나누고 나눠서...
4주차 미션에서는 3주차 미션의 학습 목표를 더 이어가는것을 목표로 했다. 바로...
클래스(객체)를 분리하는 연습!
클래스의 역할과 책임에 대해 더 고민해보는 것에 집중하고, 특히 비즈니스 로직과 UI로직을 분리해 단일 책임의 원칙을 지키도록 했다. 지난주 로또 미션에서 코드리뷰를 주고받으면서 함수를 더 분리해 보고, 데이터 클래스를 따로 정의해서 관리해 보라는 피드백을 받게 되어 해당 부분에 더욱 관심을 기울였다. 로또 미션에서 다른 사람들은 어떻게 객체를 나눴는지 면밀히 살펴보고 배운 점을 이번 미션에서 반영해보았다. 특히 Controller 파일의 start()메서드에서 모든 것을 밀어넣었던(...) 지난 날과 달리 함수를 더 잘게 쪼개 한 함수가 최대한 한 가지의 기능만 하도록 했다. 무의식적으로 start() 함수는 15라인 제한에 해당되지 않는다고 생각한 내 자신이 웃겼다.
예를 들면, 3주차까지는 이렇게 한 함수에 모든 것을 밀어넣었다. 아주 뚱뚱한 함수가 되었지만 이것도 나름대로 공백으로 기능을 나눈 것이었다..^^
fun start() {
outputView.printAskDate()
getDate()
outputView.printAskMenu()
getMenu()
outputView.printStartMessage(date)
outputView.printMenu(menu)
total = totalAmountBeforeDiscount(menu)
outputView.printPreDiscountTotal(total)
outputView.printGiftMenu(checkGiftMenu(total))
if (isEventApplicable()) {
result = eventProcessing.start(menu,date,total)
printBenefits()
printBenefitAmount()
printAfterDiscount()
printBadge()
}
}
하지만, 이제 이렇게 바뀌었다. 각 기능들을 다 함수로 빼놨기 때문이다. 훨씬 깔끔하고 메서드 라인에 대한 기준을 위반하지 않는다.
fun start() {
promotionInit()
eventPlanner()
}
👀 실수를 점검하자
이번 미션에서는 사소한 실수를 줄이려고 노력했다. 이것 역시 코드리뷰를 계기로 반성하게 되었다. 저번 주에는 코틀린 API를 통해 표현한 부분을 비슷한 다른 코드에서는 길고 가독성 없게 표현하거나, 코틀린 컨벤션을 지키지 않거나, 쓸데없는 주석을 다는 등 자잘한 실수가 잦았다. 코드리뷰를 통해 지적받은 부분을 작성한 기능목록 밑에 적어두고, 구현이 끝날 때쯤 하나씩 보며 실수를 줄여나갔다. 그렇게 하니 더 깔끔하고 가독성이 좋은 코드가 되었다.
👊🏻 가장 못해도 자신감 충전
포비님이 올린 글처럼 4주간 '가장 못 하는 사람'이 되어 하나하나 배우며 달려왔다. 1주 차, 2주 차, 3주 차를 지나와 4주 차 미션을 하며 행복했을 때는 지금까지 받은 피드백이 제 머릿속에 천천히 새겨지고 있다는 것이다. 아는 것이 많아질수록 "번뜩!💥"하는 순간이 많아져 짜릿하다. '주문 메뉴와 가격을 Enum 클래스로 만들면 좋을 것 같다!', '이 부분은 데이터 클래스로 만들어 볼까?', '이 함수는 너무 긴데 이렇게 나누면 되겠다!'와 같은 순간들이 많아졌다. 여기서 그치지 않고 Enum 클래스는 정확히 어떻게 쓰이는지, 데이터 클래스의 이점은 무엇인지, 내가 지금 쓴 코드보다 더 간결한 코드를 만드는 방법이 있는지... 등을 꼬리물기식으로 접근해서 검색하다 보니 잘 이해가 가지 않더라도 어느 순간 한 번에 이해되기도 했다. 혹은 모르는 부분을 검색한 후 탭이 촘촘해질 정도로 여러 문서나 블로그를 띄워놓은 뒤, 하나씩 읽어가며 공부했다. 특히 중복되어 나오는 부분을 메모하며 나중에 다시 기억할 수 있도록 노력했다.
📌 회고
4주 차 미션이 끝나가니, 마치 어느 성대한 잔치에서 배부르게 먹고 나온 기분이 든다. 디스코드 내에서 올라오는 다양한 글을 읽어보고, 다른 사람들은 어떻게 구현했는지 보며 코드리뷰를 하고, 작업을 하다가도 공통 피드백 문서를 계속 열어보며 곱씹어 보고…말 그대로 ‘물고 뜯고 맛보고 즐기며’ 미션을 끝내 뿌듯하고, 잊지 못할 경험인 것 같다. 이런 경험을 제공해준 우테코와 디스코드를 풍성하게 만들어준 다른 지원자 분들에게 감사하다. 이 경험을 계기로 나의 나쁜 습관(커밋을 어마무시하게 안하는 습관, 클린코드라고는 찾아볼 수 없는 덩어리들, 객체지향? 그게먼데🤨라며 보낸 나날들...)을 고치고 몰랐던 부분도 공부하게 되어 좋다. 또 이렇게 끝까지 마치니까 조금 욕심이 생긴다. 딱 최종까지만 가고싶다는 생각이...😂
📌 다음 목표
- 4주차 코드리뷰하기
- 완성한 미션 리팩토링 하기
'자격증 및 기타 활동 > 우아한테크코스' 카테고리의 다른 글
[AOS] 우아한테크코스 1차 합격과 최종 코딩테스트 후기 (0) | 2023.12.30 |
---|---|
[AOS] 우아한테크코스 6기 프리코스 3주차 회고 : 로또 (0) | 2023.11.10 |
[AOS] 우아한테크코스 6기 프리코스 2주차 회고 : 자동차 경주 (0) | 2023.11.04 |
[AOS] 우아한테크코스 6기 프리코스 1주차 회고 : 숫자야구 (0) | 2023.10.30 |