[우테코] 최종 코딩테스트 후기

SeongWon Oh·2021년 12월 18일
5

우테코 회고록

목록 보기
8/9
post-thumbnail

오늘 드디어 우아한테크코스 4기의 선별과정의 마지막 과정인 최종 코딩테스트를 봤습니다.

최종 코딩테스트의 문제는 작년 3기의 선별과정의 최종 미션이 3주차 미션과 비슷한 내용이어서 올해도 마지막 3주차 과제였던 자판기 미션 과 비슷한 내용의 미션일거라 예상을 하였습니다. 하지만 저의 예상과는 다르게 3주차 미션과 완전히 다른 미션이 나왔습니다.

올해 우테코 4기의 최종 미션은 아래의 링크를 통해 확인해보실 수 있습니다.

우테코 4기 최종 미션 - 페어매칭관리 애플리케이션
https://github.com/woowacourse/java-pairmatching-precourse

🎯 미션 수행 내용

이번 미션은 우테코 페어 프로그래밍의 팀 매칭을 프로그래밍하는 미션이었습니다.
미션의 기능은 크게 페어 매칭 기능, 페어 매칭 조회 기능, 페어 매칭 초기화 기능이 있습니다.
기능들 중의 메인 기능은 페어 매칭 기능었으며 해당 기능에서는 입력 값의 유효성 검사, 재매칭 여부, 페어 생성 등의 여러 세부 기능들로 나뉘었습니다. 그리고 프리코스 기간에는 사용하지 않았던 파일 입출력을 통해 크루의 정보를 읽어와야하는 조건 또한 있었습니다.

개인적으로는 지난 3주차 미션보다는 어려웠다고 생각됩니다.

제가 최종 미션으로 제출한 코드는 다음 링크를 통해 확인하실 수 있습니다.
https://github.com/Seongwon97/java-pairmatching-precourse/tree/Seongwon97

👊🏻 신경쓴 점과 아쉬운 점

Todo List 작성

프리코스 과정동안에는 Todo List를 README.md파일의 내용을 삭제하고 진행하였습니다. 그 당시에는 미션을 1주일이라는 기간동안 진행하여 내가 README파일에 새로 작성한 Todo List와 main branch에 있는 초기 README파일을 번갈아보며 미션을 진행하여도 크게 불편하다는 생각은 하지 못하였습니다. 하지만 프리코스 과정이 끝나고 최종 코딩테스트 준비를 하며 시간 제한을 두고 여러 문제를 보니 내가 작성한 Todo list외에도 기존 README파일에 작성되어있는 코드를 실행하였을 때의 출력문 등을 보기 위하여 웹으로 main branch를 접근하여 README파일을 보는 것은 매우 비효율적이라 생각되었습니다. 그래서 이번 최종 미션을 진행하였을 때는 ToDoList.md 파일을 새로 생성하여 해당 파일에 내가 이해한 미션의 정보와 Todo list를 작성하였습니다.

ToDoList.md파일과 기존의 README.md파일과 함께 하나의 창으로 화면을 분할하여 기능 구현들을 하다보니 확실히 구현해야할 내용 및 출력 결과 등을 한번에 볼 수 있던 것 같습니다.

한 개의 기능 구현이 끝나고 다음 기능 구현으로 넘어갈 때 TodoList를 통해 어떤 기능을 다음에 구현해야하는지 체크하고 README에서 출력 형태를 보다보니 다음 구현할 기능의 이해를 빠르게 할 수 있었던 것 같습니다.

Enum 적극 활용

이번 미션을 진행하며 코스, 미션레벨, 미션의 종류와 같은 데이터들은 모두 Enum으로 관리하도록 프로그래밍하였습니다. (각각 Course, Level, Mission이라는 enum을 생성하여 사용하였습니다.) 해당 데이터들을 enum으로 관리를 하니 코드의 가독성이 높아졌으며 각각 isExist()메서드를 구현하여 사용자로부터 과정, 레벨, 미션의 입력값을 받았을 때 해당 값이 실제 존재하는 값인지 쉽게 판단할 수 도 있던 것 같습니다.

enum을 사용한 코드의 예시는 다음과 같습니다.

public enum Course {
    BACKEND("백엔드"),
    FRONTEND("프론트엔드");

    private String name;

    Course(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public static List<String> getList() {
        return Arrays.stream(Course.values())
                .map(Course::getName)
                .sequential()
                .collect(Collectors.toList());
    }

    public static boolean isExist(String name) {
        List<Course> result = Arrays.stream(Course.values())
                .filter(course -> course.getName().equals(name))
                .collect(Collectors.toList());
        if (result.size() == 1) {
            return true;
        }
        return false;
    }

    public static Course getEnumCourse(String name) {
        return Arrays.stream(Course.values())
                .filter(course -> course.getName().equals(name))
                .collect(Collectors.toList()).get(0);
    }
}

디버깅의 활용

시험 보기 하루 전날 프리코스 3주차 미션인 자판기 미션을 다시 구현해보고 정리한 포스트인 최종 코딩테스트 대비-2 에서 말한 바와 같이 이번 테스트에서는 테스트코드 대신 디버깅을 사용하여 데이터가 옳바르게 넘어가고 저장되었는지를 체크하였습니다.

디버깅 기능을 사용하다보니 어떠한 부분에서 데이터의 누락이 발생하였고 오류가 발생하게 되었는지도 확실히 체크할 수 있어 오류 해결에 많은 도움이 되었던 것 같습니다.

시간 부족의 아쉬움

최종 코딩테스트를 진행하며 가장 걱정했던 것이 시간문제였습니다..시험 직전인 목, 금에도 우테코 3기의 3주차 프리코스 미션과 올해 3주차 프리코스 미션을 시간 제한을 두고 문제를 풀이해보며 개발 속도가 빨라지긴 했으나 그래도 시간 부족 문제를 가장 고민하였습니다..

이번 미션을 진행하면서 큰 기능들은 모두 구현하였으나 페어 매칭 기능에서 "이전에 매칭된 사람과는 매칭되지 않도록 구현"하는 내용을 구현하지 못하였습니다.

5시간이라는 시간동안 막힘없이 코딩을 하였다면 충분히 모든 기능들을 구현할 수 있었으나 중간중간 stream과 출력 부분의 데이터 출력에 막히는 부분이 있어 해당 파트의 시간 소모가 너무 많았던 것 같습니다.

30분 정도의 시간이 더 있었으면 구현하지 못한 내용 또한 구현을 완료하였을 것 같은데 시간 관리를 잘 하지 못한 점에 대해 아쉬움이 남습니다.

🙇🏻‍♂️ 마무리

마지막으로 진행한 미션인만큼 준비도 열심히 하였고 3주간 학습한 내용을 바탕으로 완벽하게 구현하는 것을 목표로 하였습니다. 최종 미션에서 완벽 구현이라는 목표를 이루지 못한 점에 아쉬움이 남지만 3주 전의 저와 현재의 저를 비교해봤을 때 확실히 많은 실력이 늘었다는 점으로 아쉬움을 달래보고자 합니다.

지난 3주간 프리코스 기간동안 많은 내용을 배운 것 같습니다.
3주라는 기간은 누군가에게는 길게 느껴질 기간이지만 저에게 지난 3주는 매우 짧았던 시간으로 느껴졌습니다.
최종 결과가 어떻게 나올지는 모르겠으나 지난 3주간 최선을 다하여 프리코스에 임하였고 배운 내용이 매우 값져서 어떠한 결과가 나와도 후회하지 않을 것 같습니다.

꾸준히 개인 공부를 진행하며 최종 결과를 기다리도록 하겠습니다.

최종 결과는 12월 30일입니다! 모두 응원해주세요👍🏻

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글