우테코 프리코스 1주차 후기

임현규·2022년 11월 4일
0

우아한 테크코스에 지원하고 어느새 일주일이 지났다. (시간 정말 빠르다...)

많은 분이 주간 회고록을 남기고 1주차 동안 느낀 점을 보면서 나도 한 번 용기를 내서 써보려고 한다. (다들 글을 정말 잘 쓰신다) 이번에 내 첫 Velog는 프리코스 1주차 회고록이군...
(항상 Notion에 작성해왔는데...)

이번 1주차 온보딩 문제를 풀면서 느꼈던 인상은 간단한 알고리즘 문제로 구성되었으나 다른 알고리즘 풀이 사이트나 문제들과는 다르게 Github를 적극적으로 이용해 문제를 푸는 것이 독특했다.

이번 문제를 해결하고 프리코스를 진행하면서 아쉬웠던 점, 그리고 좋았던 점에 관해서 이야기하고 싶다.

아쉬웠던 점

1. 요구사항 작성하기

class 위에 Javadocs 형태로 요구사항을 작성했는데 문제는 시간 안에 알고리즘 문제를 푸는 것처럼 짧게 절차 식으로 요구사항을 작성했다는 점이다. 절차 식으로 요구사항을 작성하니 리팩토링할 때도 요구사항을 수정하기 힘들었고…. 요구사항과 싱크가 맞지 않는 문제가 있었다.

다른 사람들의 PR을 보니 표 형태 또는 리스트 형식으로 깔끔하게 Readme.md에 정리한 분이 있었다. 그렇게 보니 코드를 살펴보기도 전에 PR하신 분의 의도를 빠르게 파악할 수 있어서 좋았다. 나도 2주차 때는 다른 사람들이 내가 짠 코드를 이해하기 좋게 Readme.md로 정리해봐야겠다.

2. Validation

예외처리를 어떤 방식으로 해야할지 고민이 많았는데 1주차에서는 nested class를 활용해 예외를 처리했다. 입력에 대한 원시 객체를 포장해서 예외처리를 수행했는데 생각보다 문제가 있었다. 객체에 대한 정보에서 예외처리 정보가 절 반 이상이라는 점이였다.

public class Form {

    private final String email;
    private final String nickname;

    public Form(String email, String nickname) {
        Validator.validateConstructor(email, nickname);
        this.email = email;
        this.nickname = nickname;
    }

    public static Form of(List<String> forms) {
        Validator.validateListInputSIze(forms);
        return new Form(forms.get(0), forms.get(1));
    }

    public String getEmail() {
        return email;
    }

    public String getNickname() {
        return nickname;
    }

    static class Validator {

        private static final String EMAIL_REGEX = "^\\w+@email\\.com$";
        private static final String NICKNAME_REGEX = "^[가-힣]+$";
        private static Pattern pattern;

        private static void validateConstructor(String email, String nickname) {
            validateEmailFormat(email);
            validateEmailSize(email);
            validateNicknameFormat(nickname);
            validateNicknameSize(nickname);
        }

        private static void validateListInputSIze(List<String> form) {
            if (form.size() == 2) {
                return;
            }
            throw new RuntimeException("form 사이즈는 2여야 합니다");
        }

        private static void validateEmailFormat(String email) {
            pattern = Pattern.compile(EMAIL_REGEX);
            if (pattern.matcher(email).matches()) {
                return;
            }
            throw new RuntimeException("email 형식이 맞지 않습니다");
        }

        private static void validateEmailSize(String email) {
            if (11 <= email.length() && email.length() < 20) {
                return;
            }
            throw new RuntimeException("email 사이즈는 11자 이상 20자 미만입니다");
        }

        private static void validateNicknameFormat(String nickname) {
            pattern = Pattern.compile(NICKNAME_REGEX);
            if (pattern.matcher(nickname).matches()) {
                return;
            }
            throw new RuntimeException("nickname 형식이 맞지 않습니다");
        }

        private static void validateNicknameSize(String nickname) {
            if (1 <= nickname.length() && nickname.length() < 20) {
                return;
            }
            throw new RuntimeException("nickname 사이즈는 1자 이상 20자 미만입니다");
        }
    }
}

Form 객체의 전체 라인은 대략 75줄 정도 되는데 실제 Form에 대한 정보는 19줄 정도밖에 안 된다. 예외 처리가 전체 코드의 75%를 차지하는데 예외 처리에 중복되는 코드도 많아서 추가로 개선이 필요한 것 같았다.

그래서 다음 주 차에는 Validation을 외부 클래스로 분리를 시도해봐야겠다.

좋았던 점

1. 적극적인 커뮤니티 활동

많은 분이 Github Disscusion을 통해 열심히 소통하고 고민하는 모습을 보면서 나를 다시 돌아보는 계기가 됐다. 더 좋은 코드를 짜기 위해 디자인 패턴, 메모리, 또는 자바 컨벤션에 대해서 고민하는데 배울 점이 많고, 알고 있는 것을 되돌아보게 되는 계기가 되었다. 나도 열심히 해서 많은 분께 도움이 되고 싶다.

2. 작성한 코드를 되돌아 보게 됨

나는 보통 내가 짠 코드를 일주일 뒤에 보면 무엇을 기록했는지 어떤 로직을 짯는지 보기 힘들 때가 많았다. 프리코스에서 이런 부분에 대해서 한번 더 고민하게 되고 1주차에 성장했다고 하긴 짧지만 조금 더 성장한 느낌이 들었다.

앞으로

열정은 장작에 땐 불과 같단 생각이 들었다. 불이 너무 강하면 장작이 금방 타버리고 약하면 외부요인에 쉽게 반응하고 금방 꺼진다. 프리코스 기간이 짧지 않은 만큼 내 열정을 끝까지 유지해서 좋은 결과를 얻고 싶다. 더 나아가 프리코스가 내게 새로운 장작이 되도록 만들고 싶다.

profile
엘 프사이 콩그루

1개의 댓글

comment-user-thumbnail
2022년 11월 4일

잘보고갑니다!

답글 달기