회고

[우테코 6기 BE] 프리코스 2주차 회고 - 자동차 경주

띵지니어 2023. 11. 4. 22:23

🚗 자동차 경주 링크

 

📃 구현과정

2주차에서는 "메세지" 라는 키워드로 구현을 하였습니다.

객체지향의 사실과 오해 라는 책을 읽으면서 아래 문구를 보았습니다.

"객체지향의 강력함은 클래스가 아니라 객체들이 주고받는 메시지로 부터 나온다."

그래서 저는 필요한 메세지를 먼저 만들고 객체를 먼저 만들면서 구조를 그렸습니다.

많이 부실한 객체와 메시지

하지만 아직 부실한 메시지의 형태이고, 정확한 추상화가 안 돼있어서 조금 복잡하거나, 이해가 안 될 수도 있습니다.
이번 주에는 최대한 요구사항을 지키려고 노력했으며 코드 리뷰를 열심히 하면서 부족한 부분을 채웠습니다.

그리고 가장 중요한 부분인 README 작성에 신경을 좀 썼습니다.

 

하지만 마지막 100줄 Java Collection을 사용한다 부분을 간과하여 배열을 한번 사용한 코드가 있었습니다!

체크를 했음에도,,, 실수를 했습니다.

 

그래도 2주 차 피드백에서

부분이 있었습니다. 나름 열심히 적었는데 피드백에 나와서 뿌듯하네요!!
3주 차부터는 정말 잘 정리해야겠습니다.



2주 차 역시 자동차 경주를 구현하면서 MVC 패턴이나, TDD 설계를 고려하지 않고 개발을 진행하였습니다.
최대한 기능을 쪼개는 것이 어떤 것인지 좀 더 느꼈던 일주일이었습니다.

구현하는 시간은 설계(30%), 구현(5%), 리팩터링(65%) 수준으로 진행되었으며 설계를 잘해야 리팩터링 시간을 줄일 수 있다고 생각했습니다.

마지막으로 제출 후 코드를 봤을 때 부족 한 부분들이 정말 많았습니다.
원시 값 포장 을 해야 좀 더 단위 테스트하기 편하다는 걸 느꼈고, 함수당 기능 한 개가 정말 작구나라는 것을 느꼈습니다.

 

 

👷🏾‍♂️ 힘들었던점

forced push 는 하지 맙시다 ㅠㅜ ‼️

 

git 사용하다가 이미 push된 커밋메세지를 수정하다가, forced push를 사용하였고, 그 결과는 PR 을 Closed를 하게 만들었습니다.

이유는 깃이 꼬여서, 최근 커밋된 내용이 우테코 채점 프로그램에 적용이 안되서 "0점" 이 나오는 결과를 받았기 때문입니다.

그래서 다시 브랜치를 파서 Add, Commit, Push 과정을 거쳐 다시 PR을  다시 날렸습니다.

 

그래도 코드를 노선에 백업을 해 놓고, 최대한 커밋 컨벤션을 지키면서 다시 입력을 하고 포기하지 않고 PR을 날렸습니다!

 

 

💻 코드 리뷰

디스코드 커뮤니티에 글을 올려놓고 잠이 들었고, 다음날 일어나 보니 열 분 넘게 달아주셔서 😂 모든 분들을 코드리뷰하는데 시간이 정말 오래 걸렸습니다 ㅎㅎ

제가 남의 코드를 보면서 배운점이 정말 많았고, 의견을 많이 남겨 공부가 많이 되었습니다.

반대로 제가 부족한 부분들을 정말 많이 찾았습니다.

코드리뷰하면서 공통적으로 배운 것들을 정리해 보았습니다.

 

- 원시값을 포장하여 자신의 상태를 스스로 관리 한다

원시 값 포장을 하면 책임관계가 보다 명확해지고 유지 보수가 용이한 코드를 작성할 수 있다는 점을 배울 수 있었습니다.
이 부분은 앞으로 정리하면 좋을 듯해서 포스트를 따로 할 예정이다!

 

- 기능을 좀 더 쪼개라

객체 지향 생활 체조를 보면 형변환하는 부분까지 쪼개는 경우를 보았습니다.

정말 많이 기능을 쪼개 단 하나의 기능으로 만드는게 중요하다고 느꼈습니다.

 

- 상수는 Enum으로 관리해라

예를 들면 이런 느낌입니다.

public enum ErrorConstants {

    HAS_BLANK_IN_NAME("입력된 자동차 이름에 공백이 포함 되어 있습니다."),
    NOT_MATCH_MINIMUM_CAR_SIZE("경주 가능한 최소 차의 개수는 2대 입니다."),
    HAS_DUPLICATE_NAME("중복된 이름이 있습니다."),
    IS_NOT_NUMBER("1이상의 숫자가 아닙니다.");

    public String constant;

    void Constants(String constant) {
        this.constant = constant;
    }

    public String getConstant() {
        return constant;
    }
}

 

3주차 부터는 요구사항을 잘 지키면서 최대한 하나의 기능으로 잘 쪼개는 거에 신경을 많이 쓸 예정입니다. ‼️


☑️ 목표 체크 리스트

1. ✅ 코드 리뷰 최대한 많이 해주기 ⭐️⭐️⭐️ 



이 부분은 잘 지켰습니다.
하지만 너무 과한 것 같은 느낌이 들었지만 처음에는 많이 하면서 배웠습니다 ‼️

앞으로는 양보다는 질로 승부 볼 예정입니다.


2. ✅ 타인의 회고 보면서 남의 경험 배우기

커뮤니티를 보면서 열 분 이상의 블로그를 봤고, 어떤 걸 배우셨는지 잘 보았습니다!!

 

3. ✅ "객체 지향과 사실과 오해" 책 모두 읽기

이 부분은 4주 차 미션 하기 전까지 읽으면 되는 목표이기 때문에 현재 2/3 정도 읽어서 체크를 하였습니다!

 

4. ✅ JAVA 기본 문법 공부 하기

컬렉션과, 생성자 주입 등 여러 문법을 많이 배웠습니다.

stream을 사용하여 for문을 줄일수 있었습니다.
특히 new ArrayList<>()Arrays.asList()는 다른 클래스라는 걸 몰랐다가 블로그에 회고를 하면서 알았습니다!!

 

5. ❌ 금주 하기 

실패하였습니다.
러닝과 스터디를 한 건 맞는데.. 러닝 후 회식은 생각도 못 했습니다.🏃

 

6. ✅ 스터디, 러닝 외 약속 잡지 않기

프리코스 기간에는 ‼️ 꼭 지키도록 하려고 합니다.