각종 후기/우아한테크코스

[우아한 테크코스 3기] LEVEL 1 회고 (17일차)

제이온 (J.ON) 2021. 2. 18.

안녕하세요? 제이온입니다.

 

오늘은 테코톡 발표도 하고 미션도 마감일이라서 많이 피곤했지만, 그래도 해야할 일을 모두 성공적으로 끝내서 후련합니다.

 

 

데일리 미팅

오늘 진행자는 우기였고, '레벨1 끝나고 방학때 무엇을 할 것인가'를 주제로 크루와 이야기를 나누었습니다. 레벨1 방학은 4월 초이며, 방학 기간은 약 8일 정도 주어진다고 합니다. 저는 그 때쯤이면 친구들 대부분이 군대를 가기 때문에... 밖에는 별로 안 나가고 레벨2의 스프링을 준비하지 않을까 생각한다고 말했습니다. 그 외에 다양한 크루가 집구석에 있는 것이 싫어서 밖에서 놀거나 여행을 한다는 의견이 많았습니다. 하루 빨리 코로나가 끝나야 그런 바람이 이루어지지 않을까.. 생각합니다.

 

 

테코톡 - JCF

오늘 오후 2시부터 약 1시간 동안 테코톡이 진행되었습니다. 제가 맡은 주제는 JCF였고, 약 14분 정도 발표를 진행한 것 같습니다. 워낙 JCF가 내용이 많고, 분량이 너무 길어지면 안될 것 같다는 생각에 말이 빨라진 점이 참 아쉬웠습니다. 그래도 ppt에 나와 있는 개념을 모두 다루었고, 한 크루가 많은 지식을 얻어간다는 말을 해 주어서 보람찼습니다.

 

이렇게 글 쓰는 것 외에도 말하는 기회를 얻어서 힘들었지만, 발표 실력이 약간은 올라갔다고 생각합니다. 다음에는 분량을 줄이는 대신 설명 시간을 늘리도록 노력해야겠습니다.

 

아마 추후에 유튜브에 올라갈 듯 한데 안 보셨으면 좋겠습니다 아 ㅋㅋ

 

 

페어 프로그래밍

사실 테코톡 전에 2시간 정도 열심히 페어 프로그래밍을 진행하였습니다. 자질구레한 리팩토링이 주 목적이었고, 최대한 이쁘고 안전한 코드를 만드려고 노력하였습니다. 그리고 제가 문제를 잘못 읽어서 수정한 부분도 있었습니다.

 

첫 번째는 돈이 꼭 1000원 단위일 필요는 없다는 것입니다. 처음 제가 문제를 읽었을 때는 돈이 1000원 단위가 아닐 때는 Error를 내는 줄 알았는데, 그게 아니라 1000원 단위로 살 수 있는 만큼 복권을 구매하는 것이었습니다. 예를 들어, 돈이 1500원이면 1장 사는 것입니다. 다만, 돈이 1000원 미만일 때 오류를 발생시켜야합니다.

 

 

    private void validateMinimumTicketPrice(final Money money) {
        if (money.getValue() < TICKET_PRICE) {
            throw new IllegalArgumentException(
                String.format(TICKET_MINIMUM_PRICE_ERROR_MESSAGE, TICKET_PRICE));
        }
    }

 

 

위와 같은 느낌으로 변경하였습니다.

 

 

두 번째는 당첨된 등수를 세기 위하여 EnumMap을 정의하였는데, EnumMap의 key는 Rating, value는 당첨된 등수의 횟수가 됩니다. 이때, value 자료형이 Integer보다는 Counter로 불변 객체를 만드는 것이 낫다고 생각하였습니다.

 

 

package lotto.domain.rating;

import java.util.Objects;

public class Counter {

    private final int count;

    public Counter() {
        this(0);
    }

    public Counter(final int count) {
        this.count = count;
    }

    public Counter plus() {
        return new Counter(count + 1);
    }

    public int getCount() {
        return count;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Counter counter = (Counter) o;
        return count == counter.count;
    }

    @Override
    public int hashCode() {
        return Objects.hash(count);
    }
}

 

 

제이슨의 수업에서 배운 대로, 원시 타입을 포장하여 불변 객체로 만들어 보았습니다. 특히, plus() 부분에서 count++가 아니라 새로운 메모리를 할당하여 넘긴다는 것이 중요하였습니다.

 

 

세 번째는 수익률의 자료형 문제입니다. 출력할 때 소수점도 나와야하는데 Integer로 설정해서 0.xx일 때는 항상 0이 나와버리는 문제가 있었습니다. 그래서 바로 반환 타입을 double로 수정하였습니다.

 

그 외에 각종 상수나 테스트 코드를 리팩토링하였습니다.

 

 

학습 로그 작성

이번 3기부터 pr을 보낼 때, 아래 코멘트에 학습 로그를 작성하도록 바뀌었습니다. 자신이 무엇을 중점적으로 학습하였고, 어떤 점이 어려웠고, 잘하는 파트가 어디인지 파악을 하기 위해서였죠.

 

 

 

 

이런식으로 작성하되, '-' 오른쪽에 숫자는 중점을 둔 비중입니다. 저는 20점 만점에 각각의 내용을 적었습니다. 제가 작성한 전문을 보고 싶으신 분은 이곳을 참고하시면 되겠습니다.

 

 

학습 로그를 작성하면서 제가 이번에 개발할 때 사용한 주요 개념을 정리하는데 상당히 유용하였습니다. 저는 블로그에서도 회고를 하고 있지만, 다양한 잡담도 섞어서 쓰기때문에 학습 내용만 보기에는 불편한 감이 있습니다. 하지만, 이러한 부족한 부분을 학습 로그를 통해 메울 수 있으니 다른 크루 분들도 생활화하시면 좋을 듯 합니다.

 

 

정리

이렇게 6시 마감인 미션을 2시간 정도 일찍 끝내고 17일차 회고도 마쳤습니다. 이번 리뷰어 님은 데이브이고, 제 코드에서 부족한 부분은 화끈하게(?) 까주셨으면 좋겠습니다. 이틀 간 고생한 완태에게 감사하고, 아무쪼록 이번에도 성장할 수 있는 기회를 얻어서 값진 시간이었다고 생각합니다.

 

저의 1차 피드백 전 부족한 코드는 이곳에서 확인하실 수 있습니다.

추천 글