본문 바로가기
Backend 🧦/우테코 5기 프리코스 💡

[우아한테크코스 백엔드5기] 프리코스 2주차 베이스볼 회고

by 서니서닝 2022. 12. 7.
728x90

 

🔗 미션 링크

2주 차 미션 : https://github.com/woowacourse-precourse/java-baseball

작성한 코드 : https://github.com/woowacourse-precourse/java-baseball/pull/786

간략한 후기 : 


📃 미션

  • 야구게임 : 1~9까지 서로 다른 숫자 3자리를 맞추는 게임
  • 미션은  java-baseball저장소를 Fork & Clone하여 Pull-Request하여 제출한다.
  • 기능을 구현하기 전 docs/README.md에 구현할 기능 목록을 정리 추가한다.
  • Git 커밋 단위는 기능 목록 단위로 추가한다.
  • 커밋 메시지 컨벤션 가이드를 참고해 커밋 메시지를 작성한다.
  •  
  • 추가요구사항
    • indent depth는 2까지 허용
    • 3항 연산자 사용X
    • 함수가 한가지 일만 하도록
    • JUnit5와 AssertJ를 이용하여 테스트 코드로 확인

🔧 1주차 피드백

    • 요구사항을 정확히 준수한다
    • 커밋 메시지를 의미있게 작성한다
    • git을 통해 관리할 자원에 대해서도 고려한다
      • .class 파일은 java 코드가 있으면 생성할 수 있다. 따라서 .class 파일은 굳이 git을 통해 관리하지 않아도 된다.
        IntelliJ IDEA의 .idea  폴더, Eclipse의 .metadata 폴더 또한 개발 도구가 자동으로 생성하는 폴더이기 때문에 굳이 git으로 관리하지 않아도 된다.
        앞으로 git에 코드를 추가할 때는 git을 통해 관리할 필요가 있는지를 고려해볼 것을 추천한다.
  • Pull Request를 보내기 전 브랜치를 확인한다
  • 이름을 통해 의도를 드러낸다
  • 축약하지 않는다
  • 공백도 코딩 컨벤션이다
  • 공백 라인을 의미 있게 사용한다
  • space와 tab을 혼용하지 않는다
  • 의미없는 주석을 달지 않는다
  • IDE의 코드 자동 정렬 기능을 활용한다
  • Java에서 제공하는 API를 적극 활용한다
  • 배열 대신 Java Collection을 사용한다

작성한 ReadMe

# 📝 구현할 기능 목록

---

### 1. 상대방(컴퓨터) 숫자 생성 기능
- 랜덤으로 1~9 사이의 숫자를 추출
- 중복된 숫자가 있는지 확인
- 리스트에 저장
  - 사이즈가 3을 넘어선 안됨

### 2. 사용자 숫자 생성 기능
- "숫자를 입력해주세요 : " 출력
- 인풋 받기
- 예외를 확인한다.
    - 세글자가 아닐 경우
    - 중복이 있을 경우
    - 숫자가 아닐 경우
    - 0이 있을 경우

### 3. 게임 힌트 기능
- 같은 수가 같은 자리 있는 지 확인, 스트라이크
- 같은 수가 다른 자리 있으면, 볼
- 같은 수가 전혀 없으면, 낫싱

### 4. 게임 반복 기능
- "게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요." 출력
- 인풋 받기
  - 1을 받으면 반복
  - 2를 받으면 종료
  - 그 외 예외처리

### 5. 게임 실행 기능
- "숫자 야구 게임을 시작합니다." 출력
- 상대방(컴퓨터) 숫자, 사용자 숫자 생성
- 힌트 출력
- 3 스트라이크 일 경우, "3개의 숫자를 모두 맞히셨습니다! 게임 종료" 출력
- 게임 반복 기능

### 고려해야 할 점
- `camp.nextstep.edu.missionutils`에서 제공하는 `Randoms` 및 `Console` API를 사용하여 구현해야 한다.
- Random 값 추출은 `camp.nextstep.edu.missionutils.Randoms`의 `pickNumberInRange()`를 활용한다.
- 사용자가 입력하는 값은 `camp.nextstep.edu.missionutils.Console`의 `readLine()`을 활용한다.
- JUnit 5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다.

 

📊 다이어그램

 

📖 1주차를 통해 배운 내용

  • MVC패턴
  • 테스트 코드
    • Reflection
  • commit 메시지
  • Java 프로그래밍 코딩표준
    • 공백도 코딩 컨벤션
    • 의미있는 변수명

 

MVC패턴을 적용하려고 노력했다.

패턴을 적용한 코드를 짜본 경험이 없어서, 일단은 전체 기능을 구현한 다음 패키지를 분리하는 방향으로 진행했다.

이번 주차는 일단 view는 model이 가지고 있는 정보를 저장해서는 안되고, model은 view나 controller에 대한 어떤 정보도 알면 안되는 특성을 만족하기 위해 노력했다.

비록 완벽하게 mvc패턴으로 구현했다고 말할 수는 없지만, 적어도 여태하던 막코딩과는 다른 느낌이라 뿌듯했다.

 

테스트코드에 대한 중요성은 많이 배웠다. 그렇지만, 여태 제대로된 테스트 코드를 짠 적은 없다.

예전에 테스트코드 잘 못짜서 교수님께 지적을 받은 기억만 남아있음..

동적으로 클래스를 사용하여야하는 때의 테스트 코드를 위해 Reflection이라는 기능을 처음 써보았다. 테스트 코드를 실행해보면서 코드가 다 섞여있으면, 테스트할 때에도 불편함이 많은 것을 알게 되었다. 메서드가 최대한 한 기능만 수행하게 하는 것이 이래서 중요한가 싶기도 했다.

 

저번주에 이어 commit메세지에 대하여 계속 공부하였다.

이번 주차는 fix는 코드 내 버그나 놓친 부분 등 내용을 수정할 때 사용하고 refactor은 유지보수나 가독성, 로직변경 시 사용한다는 것을 알게 되었다. 또한 <scope>부분에 무엇을 써야하는지 많은 고민을 했다. 처음엔 함수 하나 하나를 다 작성해야하나? 했는데, 일단은 수정한 파일명을 쓰는 것으로 결정했다.

 

코드를 짤 때에 무조건 간결한 것이 좋을 것이라고 생각했는데, commit메세지에 어느정도 자세하게 쓰는 것이 더 좋은 것을 알게 되었다. 나만의 명확한 기준을 만드는 것이 중요하다.

 

가장 기억에 남는 피드백은 '공백도 코딩 컨벤션이다'이다. for, if, while 뒤에 공백 또한 코딩 컨벤션임을 알게 되었다. 확실히 indent가 2가 되도록하고, 공백도 의미있게 하려고 노력하다 보니 코드가 훨씬 간결해졌다.

728x90

댓글