우아한테크코스/프리코스

[2주차] 자동차 경주 미션 refactoring & 회고록 (~ing)

pearl.k 2023. 11. 3. 14:54

1주차 미션은 시험 기간 이슈로 시간이 부족해서 완성도가 높지 않고, 코드 리뷰도 충분히 하지 못했기 때문에 2주차 미션부터 회고록을 작성한다!

 

PR 링크

https://github.com/woowacourse-precourse/java-racingcar-6/pull/2096

 

[자동차 경주] 강진주 미션 제출합니다. by Pearl-K · Pull Request #2096 · woowacourse-precourse/java-racingcar-6

 

github.com

 


2주차 목표와 앞으로 3주차 목표를 간단하게 정리하자. 앞으로 이 부분을 염두에 두고 다음 프로젝트를 진행해야 한다.

 

2주차

1. 함수를 분리하기

2. 각 함수별로 테스트를 작성하는 것

 

3주차

1. 클래스(객체)를 분리하는 연습

2. 도메인 로직에 대한 단위 테스트를 작성하는 연습

 


2주차 공통 피드백에 대한 self 점검 시간

 

1. README.md 상세히 작성하기

 - 해당 프로젝트가 어떤 프로젝트인지 설명하는 부분이 미흡했다. -> 다음주에 반영

 - 마크 다운 문법을 어느정도 사용했으나, 아직 다양한 문법을 활용하지는 않았다. -> 다음주에 반영

 

2. 기능 목록 재검토

 - 기능 목록을 너무 자세하게 적지 말고(클래스/메서드 설계 등) 기능 위주로 적기 -> 어느 정도 반영

 - 예외 상황도 기능 목록에 자세하게 적어야 하는데 이 부분을 강조하지 못했다. -> 다음주에 반영

 

3. 기능 목록 업데이트

 - 처음부터 완벽하게 작성하려고 생각하지말고, 구현 중에 업데이트 해라 -> 어느 정도 반영

 - 죽은 문서가 아니라 살아있는 문서를 만들어라. -> 내 최신 상황을 계속 반영하도록 업데이트 필요

 

4. 값 하드 코딩 금지

 - 문자열, 숫자 등의 값을 하드 코딩 하지말고, 상수로 관리하라 -> 미흡한 부분이므로 즉시 해결 방안 모색, 2주차 refactoring에 참고

 

5. 구현 순서도 코딩 컨벤션에 포함

 - 상수, 멤버 변수, 생성자, 메서드 순으로 작성 -> 어느 정도 지키고 있으나 다음부터 더 신경쓰기

 

6. 변수 이름에 자료형 사용 금지

 - 변수 이름에 자료형, 자료 구조를 사용하지 마라 -> 어느 정도 지키고 있으나 다음부터 더 신경쓰기

 

7. 한 함수가 한 가지 기능만 담당하게 만들기

- 함수 길이가 길어진다면 여러 가지 기능을 한 번에 처리하려고 하는 것이므로 분리해라 -> 아직 미흡함, 2주차 refactoring에 참고

 

8. 함수가 한 가지 기능만 담당하고 있는지 확인 기준 세우기

 - 함수가 특정 길이(ex. 15줄) 이상으로 길어지면 함수 분리 고민하기 -> 이 조언을 참고하여 함수 분리를 계속 모색하기

 

9. 테스트 작성 이유에 대해 본인의 경험을 토대로 정리

- 테스트는 즉각적으로 내 코드에 대한 피드백을 받을 수 있는 기능이다. 학습 도구로도 활용할 수 있다. -> 테스트의 의미를 이렇게 확장해서 생각해보지 못했음. 테스트 코드의 미흡함을 보고 함수 위주로, 나의 코드 작성 경험을 토대로 더 많이 만들어 보는 연습이 필요

 

10. 처음부터 큰 단위의 테스트 만들지 않기

 - 작은 단위부터 큰 단위로, 문제를 작게 나누고 핵심 기능에 가까운 부분부터 테스트 만들기 -> 미흡한 부분. 나는 그동안 예외 처리나 중요하게 판단해야 하는 로직만 테스트가 필요하다고 생각했는데, 테스트에 대한 인식이 바뀌고 확장되는 계기가 되었다.

 


 

2주차 코드 리뷰를 통해 더 공부해야 할 목록을 만들었다.

 

1. 자바 컬렉션 (일급 컬렉션, HashSet 등)

  - https://jojoldu.tistory.com/412 (일급 컬렉션에 대해서 공부할 수 있고, 예시가 소개된 글이다.)

 

일급 컬렉션 (First Class Collection)의 소개와 써야할 이유

최근 클린코드 & TDD 강의의 리뷰어로 참가하면서 많은 분들이 공통적으로 어려워 하는 개념 한가지를 발견하게 되었습니다. 바로 일급 컬렉션인데요. 왜 객체지향적으로, 리팩토링하기 쉬운 코

jojoldu.tistory.com

 

2. 상수 처리 (하드 코딩 하지 않기, 다른 분들의 상수 처리 코드 참고하기)

 - https://techblog.woowahan.com/2527/ (Java Enum 에 대해서 배울 수 있는 글이다.)

 

Java Enum 활용기 | 우아한형제들 기술블로그

{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E

techblog.woowahan.com

 

3. 메서드 네이밍 규칙 (일반적으로 통용되는 규칙, 반환형에 따른 메서드 네이밍 규칙)

 - https://tecoble.techcourse.co.kr/post/2020-04-26-Method-Naming/ (각 상황에서 추천되는 네이밍 기법이 담겨 있다.)

 

좋은 코드를 위한 자바 메서드 네이밍

tecoble.techcourse.co.kr

 

4. 전반적으로 코드 길이 줄이고 깔끔하게 짜는 것 신경 쓰기

 - gpt의 도움을 받아서 줄이거나, 깔끔하게 짜신 다른 분들의 코드를 참고하여 내 것으로 흡수하는 방법

 

5. stream() 메서드 사용법 배우기

 - https://hbase.tistory.com/171 (stream의 생성 - 사용법에 대해 설명된 글이다.)

 

[Java] 자바 스트림(Stream) 사용법 및 예제

자바 스트림(Stream) 자바의 스트림(Stream)은 'Java 8'부터 지원되기 시작한 기능이다. 컬렉션에 저장되어 있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드패턴이다. 람다식과 함께 사용되

hbase.tistory.com

 

6. 문자열 반복 메서드 repeat() 사용법 배우기

 - https://velog.io/@chosj1526/JAVA-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B0%98%EB%B3%B5-%EB%A9%94%EC%84%9C%EB%93%9C-repeat (for문을 사용하는 대신 repeat()를 사용하면 원하는 횟수만큼 문자열을 반복할 수 있다.)

 

[JAVA] 문자열 반복 메서드 repeat()

보통 문자열을 반복해서 쓰고 싶다면 for문을 사용해서 나열하는 방법만 사용했었는데,repeat을 사용하여 편하게 문자열을 반복 나열 할 수 있다.String 메서드 중 하나로 String 문자열을 파라미터의

velog.io

 

7. MVC 패턴

https://velog.io/@jiihyun/MVC-%ED%8C%A8%ED%84%B4%EC%97%90-%EB%8C%80%ED%95%B4

 

MVC 패턴에 대해

MVC패턴에 대한 개념과 이를 숫자 야구 게임에 적용한 내용을 정리한 글입니다!

velog.io