
📌 4주 차 미션: 크리스마스 프로모션
드디어 마지막 미션을 받았습니다.
많이 복잡해진 요구사항을 보고 망했다 싶었지만
매주 같은 반응이었기 때문에
지난 미션들을 해낸 제 자신을 믿고 성실히 과제를 수행하였습니다.
✅ 4주 차 목표
클래스(객체)를 분리하는 연습

미션 내내 지속적으로 역할과 책임을 분리하도록 강조하고 있었고
이번 미션에서는 추가적인 학습 목표 없이
더 심도 있게 클래스를 분리하는 연습을 하도록 되어있었습니다.
✅ 추가된 프로그래밍 요구사항
제공되는 InputView, OutputView 객체를 활용해 구현한다.
const InputView = {
async readDate() {
const input = await Console.readLineAsync("12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!)");
// ...
}
// ...
}
const OutputView = {
printMenu() {
Console.print("<주문 메뉴>");
// ...
}
// ...
}
이렇게 view단의 객체를 제공해 줌으로써
클래스를 분리하는 방법에 대해 힌트를 제공해 준 것 같았습니다.
⚽️ 고민의 흔적
1. controller의 이름을 어떻게 해야 할까?
크리스마스 프로모션이지만 확장성을 고려해 EventPlannerController라고 작성하였다.
2. 개행처리는 메세지에 포함하는 게 나을까? 아니면 개행처리하는 문자열을 따로 만드는 게 좋을까?
메시지에 문자열과 함께 직접적으로 개행 처리를 하는 '\n'이 함께 들어가 좋지 않아 보였습니다.
따로 '\n'이라는 상수를 만들어 사용할까도 했으나 코드가 길어져서 고민되었는데
아래와 같이 ChatGPT의 답을 받고 메시지에 포함시켰습니다.

3. 메뉴판에 없는 메뉴 입력 시 예외 던지기
사용자가 입력한 문자열로 된 메뉴 형태를 어떻게 사용할 것인가에 대한 고민을 많이 했습니다.
처음엔 객체로 만들어 사용하고자 했으나 메뉴와 개수를 하나씩 순회하며 검증하려면
배열을 사용하는 것이 맞다고 생각했습니다.
일단 문자열을 콤마(', ')와 하이픈('-')을 기준으로
split() 메서드를 이용해 이중 배열을 만들어주었고
Map 객체를 만들어 keys(), values() 메서드로
메뉴와 개수를 요소로 가진 배열로 분리시켜
각각 검증을 하기 쉽게 만들었습니다.
이 로직에서 사용한 함수나 메서드가 아쉬움이 많이 남아서
코드리뷰를 하면서 이문제를 다른 분들은 어떻게 해결했는지 살펴볼 예정입니다.🥹
4. 요구사항 꼼꼼히 읽기
기능 구현을 거의 완료하고 실행해 보는데
리드미에서 제공된 예시와 다르게 결괏값이 출력되고 있었습니다.

원인은 제가 총 혜택금액과 할인금액을 동일시했다는 것이었습니다.
할인금액은 증정품인 샴페인(25000원)을 포함하지 않습니다.
처음에는 Event 클래스에서 할인금액만을 리턴하고 있었는데
위 문제를 발견하고 나서는 할인금액과 혜택금액을 리턴하는 방식으로 수정하여 해결하였습니다.
5. 상수 관리하기
지난 미션에서 모든 상수들을 한 파일에서 관리해서
기능마다 필요한 상수들을 찾아가기 힘들었습니다.
이번 미션에서는 목적별로 파일들을 나누어
사용하기 편리하게 하였습니다.

🎙️ 소감
이 글을 작성하기 전에 다른 분들의 회고를 쭉 훑어보았습니다.
주차별로 엄청난 성장 스토리를 가지신 분들이 있는 반면
저처럼 시간에 쫓겼네, 나 성장한 거 맞나라고 느끼신 분들도 계신 것 같습니다.
프리코스에만 집중해도 시간이 모자랄 텐데 온전히 몰입하지 못한 것이 아쉽습니다 :(
프리코스 종료 메일에 앞으로의 활동을 제안해 주셨는데
그중 회고하면서 다음단계 목표 설정하기가 있었습니다.
내가 부족한 점은 무엇인지, 다음 단계로 집중해야 할 것은 무엇인지 생각해 보는 시간을 가져보라는 것인데요,
아래와 같이 정리해 보았습니다.
🥲 부족한 점
1. 설계가 부족했다. 무턱대고 기능 구현으로 들어갔다.
예전에 시니어 개발자분의 커피챗 내용을 본 적이 있는데
chatGPT를 사용할 때보다 잘못된 설계를 했을 때 죄책감을 더 가져야 한다.
라는 말씀을 하셨습니다. 그만큼 코드를 작성하는 데 있어서 설계가 정말 중요한데요.
기능 구현 목록을 작성한 뒤 바로 기능 구현으로 뛰어들어
코드를 작성하면서 시간도 많이 낭비하고 혼란도 자주 겪었습니다.
구체적이진 않더라도 큰 틀에서의 설계를 했더라면
제 코드 퀄리티도 작업시간도 훨씬 좋아졌을 것 같습니다.
2. 시간 분배를 잘못했다.
1의 문제도 있지만 현실 문제와 함께 병행을 하려니
리팩터링 할 시간과 테스트 코드 작성할 시간을
적절히 분배했어야 했는데 그러지 못해 아쉽습니다.
🫡 다음 단계로 집중해야 할 것
1. 1~4주 차 미션 다시 구현해 보기
위 부족한 점을 바탕으로 1~4주 차미션을 다시 구현해 보고
주차별 피드백과 프로그래밍 요구사항을 꼼꼼히 반영해 볼 예정입니다.
많이 아쉬웠던 테스트코드에 특히 신경을 쓰고
다른 분들의 회고를 읽으며 얻은 인사이트들도 적용해보고 싶습니다.
2. 제대로 이해했는지 혼자서 판단하기 어렵다. 동료들을 잘 이용하자.
초반에는 코드리뷰를 자주 주고받았는데 후반부로 갈수록
다른 분들의 코드를 읽는 정도밖에 하지 못했습니다.
제코 들어가 피드백을 잘 반영했는지 제대로 이해하고 있는지 혼자서는 알 수 없지만
코드리뷰를 하면서 몰랐던 부분을 깨닫고 생각해 볼 기회가 많았기에
앞으로의 시간 동안 많은 리뷰를 주고받고 싶습니다.
'우테코 프리코스' 카테고리의 다른 글
[우테코 프리코스] 6기 종료 회고 (with 코드리뷰 스터디) (1) | 2023.12.12 |
---|---|
[우테코 프리코스] 3주 차 회고 (1) | 2023.11.23 |
[우테코 프리코스] 2주 차 회고 (3) | 2023.11.03 |
[우테코 프리코스] 1주 차 회고 (7) | 2023.10.26 |

📌 4주 차 미션: 크리스마스 프로모션
드디어 마지막 미션을 받았습니다.
많이 복잡해진 요구사항을 보고 망했다 싶었지만
매주 같은 반응이었기 때문에
지난 미션들을 해낸 제 자신을 믿고 성실히 과제를 수행하였습니다.
✅ 4주 차 목표
클래스(객체)를 분리하는 연습

미션 내내 지속적으로 역할과 책임을 분리하도록 강조하고 있었고
이번 미션에서는 추가적인 학습 목표 없이
더 심도 있게 클래스를 분리하는 연습을 하도록 되어있었습니다.
✅ 추가된 프로그래밍 요구사항
제공되는 InputView, OutputView 객체를 활용해 구현한다.
const InputView = {
async readDate() {
const input = await Console.readLineAsync("12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!)");
// ...
}
// ...
}
const OutputView = {
printMenu() {
Console.print("<주문 메뉴>");
// ...
}
// ...
}
이렇게 view단의 객체를 제공해 줌으로써
클래스를 분리하는 방법에 대해 힌트를 제공해 준 것 같았습니다.
⚽️ 고민의 흔적
1. controller의 이름을 어떻게 해야 할까?
크리스마스 프로모션이지만 확장성을 고려해 EventPlannerController라고 작성하였다.
2. 개행처리는 메세지에 포함하는 게 나을까? 아니면 개행처리하는 문자열을 따로 만드는 게 좋을까?
메시지에 문자열과 함께 직접적으로 개행 처리를 하는 '\n'이 함께 들어가 좋지 않아 보였습니다.
따로 '\n'이라는 상수를 만들어 사용할까도 했으나 코드가 길어져서 고민되었는데
아래와 같이 ChatGPT의 답을 받고 메시지에 포함시켰습니다.

3. 메뉴판에 없는 메뉴 입력 시 예외 던지기
사용자가 입력한 문자열로 된 메뉴 형태를 어떻게 사용할 것인가에 대한 고민을 많이 했습니다.
처음엔 객체로 만들어 사용하고자 했으나 메뉴와 개수를 하나씩 순회하며 검증하려면
배열을 사용하는 것이 맞다고 생각했습니다.
일단 문자열을 콤마(', ')와 하이픈('-')을 기준으로
split() 메서드를 이용해 이중 배열을 만들어주었고
Map 객체를 만들어 keys(), values() 메서드로
메뉴와 개수를 요소로 가진 배열로 분리시켜
각각 검증을 하기 쉽게 만들었습니다.
이 로직에서 사용한 함수나 메서드가 아쉬움이 많이 남아서
코드리뷰를 하면서 이문제를 다른 분들은 어떻게 해결했는지 살펴볼 예정입니다.🥹
4. 요구사항 꼼꼼히 읽기
기능 구현을 거의 완료하고 실행해 보는데
리드미에서 제공된 예시와 다르게 결괏값이 출력되고 있었습니다.

원인은 제가 총 혜택금액과 할인금액을 동일시했다는 것이었습니다.
할인금액은 증정품인 샴페인(25000원)을 포함하지 않습니다.
처음에는 Event 클래스에서 할인금액만을 리턴하고 있었는데
위 문제를 발견하고 나서는 할인금액과 혜택금액을 리턴하는 방식으로 수정하여 해결하였습니다.
5. 상수 관리하기
지난 미션에서 모든 상수들을 한 파일에서 관리해서
기능마다 필요한 상수들을 찾아가기 힘들었습니다.
이번 미션에서는 목적별로 파일들을 나누어
사용하기 편리하게 하였습니다.

🎙️ 소감
이 글을 작성하기 전에 다른 분들의 회고를 쭉 훑어보았습니다.
주차별로 엄청난 성장 스토리를 가지신 분들이 있는 반면
저처럼 시간에 쫓겼네, 나 성장한 거 맞나라고 느끼신 분들도 계신 것 같습니다.
프리코스에만 집중해도 시간이 모자랄 텐데 온전히 몰입하지 못한 것이 아쉽습니다 :(
프리코스 종료 메일에 앞으로의 활동을 제안해 주셨는데
그중 회고하면서 다음단계 목표 설정하기가 있었습니다.
내가 부족한 점은 무엇인지, 다음 단계로 집중해야 할 것은 무엇인지 생각해 보는 시간을 가져보라는 것인데요,
아래와 같이 정리해 보았습니다.
🥲 부족한 점
1. 설계가 부족했다. 무턱대고 기능 구현으로 들어갔다.
예전에 시니어 개발자분의 커피챗 내용을 본 적이 있는데
chatGPT를 사용할 때보다 잘못된 설계를 했을 때 죄책감을 더 가져야 한다.
라는 말씀을 하셨습니다. 그만큼 코드를 작성하는 데 있어서 설계가 정말 중요한데요.
기능 구현 목록을 작성한 뒤 바로 기능 구현으로 뛰어들어
코드를 작성하면서 시간도 많이 낭비하고 혼란도 자주 겪었습니다.
구체적이진 않더라도 큰 틀에서의 설계를 했더라면
제 코드 퀄리티도 작업시간도 훨씬 좋아졌을 것 같습니다.
2. 시간 분배를 잘못했다.
1의 문제도 있지만 현실 문제와 함께 병행을 하려니
리팩터링 할 시간과 테스트 코드 작성할 시간을
적절히 분배했어야 했는데 그러지 못해 아쉽습니다.
🫡 다음 단계로 집중해야 할 것
1. 1~4주 차 미션 다시 구현해 보기
위 부족한 점을 바탕으로 1~4주 차미션을 다시 구현해 보고
주차별 피드백과 프로그래밍 요구사항을 꼼꼼히 반영해 볼 예정입니다.
많이 아쉬웠던 테스트코드에 특히 신경을 쓰고
다른 분들의 회고를 읽으며 얻은 인사이트들도 적용해보고 싶습니다.
2. 제대로 이해했는지 혼자서 판단하기 어렵다. 동료들을 잘 이용하자.
초반에는 코드리뷰를 자주 주고받았는데 후반부로 갈수록
다른 분들의 코드를 읽는 정도밖에 하지 못했습니다.
제코 들어가 피드백을 잘 반영했는지 제대로 이해하고 있는지 혼자서는 알 수 없지만
코드리뷰를 하면서 몰랐던 부분을 깨닫고 생각해 볼 기회가 많았기에
앞으로의 시간 동안 많은 리뷰를 주고받고 싶습니다.
'우테코 프리코스' 카테고리의 다른 글
[우테코 프리코스] 6기 종료 회고 (with 코드리뷰 스터디) (1) | 2023.12.12 |
---|---|
[우테코 프리코스] 3주 차 회고 (1) | 2023.11.23 |
[우테코 프리코스] 2주 차 회고 (3) | 2023.11.03 |
[우테코 프리코스] 1주 차 회고 (7) | 2023.10.26 |