영호
우아한테크코스 5기 최종 코딩 테스트 회고 본문
개요
우아한테크코스 백엔드 5기 최종 코딩 테스트 후기를 작성해보려고 합니다.
문제를 보고 느낀 점
최종 테스트를 보기 전 같이 피어리뷰 스터디를 하던 분들과 중꺾마 얘기를 하고 갔기 때문에 아무리 어려워도 끝까지 최선을 다한다는 마음으로 임했습니다. 사실 처음엔 문제가 잘 이해되진 않았지만 하나씩 풀어나가다 보니 서서히 풀린다는 느낌을 받았습니다.
최종 코딩 테스트 관련 메일에서 돌아가는 쓰레기를 만드는게 더 낫다는 내용이 있었지만, 제 코드를 완전히 신뢰할 수 없기에 최소한의 테스트코드를 작성하려고 했습니다. 실제로 이렇게 구현을 하다 보니 시간이 촉박하긴 했습니다 ㅎ,,
그리고 기능목록도 계속해서 업데이트하려고 했습니다. 그동안 해왔던 방식인 각 기능목록을 체크박스로 만들고 구현 완료 시 체크하는 방식으로 구현해왔기 때문에, 이를 최종 코딩 테스트에서도 적용했습니다. 이에 더불어 중간중간 생각나는 기능, 예외사항 역시 계속 추가하면서 최종 코딩 테스트를 치렀습니다.
아쉬웠던 점
구현은 했지만 호출은 하지 않은..
우선 하나의 카테고리는 2번까지만 추천될 수 있다는 요구사항이 있었습니다. 이에 저는 이를 만족하는 메서드를 구현하고 테스트코드 작성까지 완료했습니다. 하지만 시험이 끝나고 추천하는 과정에서 추천된 카테고리의 횟수를 증가시키는 메서드 호출을 빼먹은 것을 알게 됐습니다.
그래서 추천된 카테고리가 2번 추천됐는지 확인은 하지만 실제 추천된 횟수를 증가시키지 않기 때문에, 카테고리는 2번까지만 추천될 수 있다는 요구사항을 충족시키지 못했습니다. 호출 코드 하나를 놓친 점이 아쉽게 남았습니다. 전체적인 프로그램 흐름을 따라가면서 확인하는 작업을 가졌다면 쉽게 잡을 수 있는 실수라 더욱 아쉽게 남았습니다.
그리고 최종 테스트를 시작할 때 '통합테스트는 작성하지 못하더라도 단위테스트는 작성해보자'라는 마음으로 임했는데, 통합테스트의 중요성도 깨닫게 됐습니다 ㅎ.
테스트 코드 작성으로 시간이 부족했던 점보다는 통합 테스트를 작성하지 못한것이 더 아쉽게 남았습니다.
원시값 포장, 일급 컬렉션
그동안 프리코스, 최종 코딩 테스트 준비를 하면서 이 부분에 대해 연습했습니다. 그러나 막상 시험이 시작되니 이를 만족하면서 제시간에 모든 기능을 완료할 수 있다는 생각이 들지 않아 '나중에 리팩토링 하자'라는 마음을 가지고 임했습니다.
결과적으로 '리팩토링 해야지'라고 마음먹었지만 리팩토링 하지 못했습니다. 이 부분도 연습한 부분이지만 실제로 써먹지 못해 아쉬움이 남았습니다.
아쉬운 부분을 모두 적자면 너무 많아져서 여기까지만 적겠습니다 ㅎ,,
만족한 점
Enum사용
이번 프리코스를 진행하면서 처음으로 자바를 사용해 봤습니다. 그래서 프리코스에서 Enum을 처음 사용해 봤고, 최종 코딩 테스트에서도 Enum을 적절하게 사용했다고 생각합니다.
예를 들어, 메뉴 입력 시 유효한 메뉴인지 확인할 때 Enum을 활용해 구현 존재하는 메뉴가 아니라면 예외를 발생시키도록 했습니다.
객체지향에 익숙해졌다?
그동안 객체지향적인 설계 경험 없이 프리코스를 시작해 관련 책을 읽고, 다양한 세미나를 찾아보는 등 객체지향에 익숙해지려고 노력했습니다. 그리고 다양한 문제를 풀어보면서 계속해서 고민하는 과정을 통해 확실히 객체지향에 익숙해졌다는 느낌을 최종 코딩 테스트에서 받았습니다.
피어 리뷰
프리코스, 최종 코딩 테스트를 준비하면서 우테코 커뮤니티, 피어 리뷰 스터디를 통해 다른 분들과 설계에 대한 의견도 주고받고, Java기능에 대해서도 보다 효율적인 방법을 조언받았습니다. 이 과정을 통해 StringJoiner, EnumMap, @MethodSource 등 다양한 Java기능들에 대해 새롭게 알 수 있었습니다.
실제로 최종 코딩 테스트에 위 내용들을 적용할 수 있었습니다. 물론 혼자서 고민한 과정도 의미 있었지만, 다른 분들과 의견 교류를 통해 성장한 부분도 저에게 정말 의미 있는 시간들이었습니다.
메시지를 보내라
프리코스 중 피드백 내용에 있었던 내용 중 객체에 메시지를 보내라는 내용이 있었고, 이 부분 역시 계속 연습해오던 부분이었습니다. 그리고 이를 최종코딩테스트에서도 적용했습니다.
예를 들어, 추천된 메뉴가 코치가 못 먹는 음식인지 판단할 때 코치 별 못 먹는 음식을 가지고 있는 객체에게 isForbiddenMenu()라는 메서드를 구현해 데이터를 가져와 판단하는 것이 아닌 메시지를 보내는 방식으로 구현했습니다.
구현 코드
https://github.com/youngh0/java-menu/tree/youngh0
'우아한테크코스5기' 카테고리의 다른 글
도메인 객체의 ID부여 (1) | 2023.06.04 |
---|---|
우아한테크코스 5기 프리코스 4주차 후기 (1) | 2022.11.25 |
우아한테크코스 5기 프리코스 3주차 후기 (0) | 2022.11.16 |
우아한테크코스 5기 프리코스 2주차 후기 (0) | 2022.11.09 |