🍫카카오 테크 캠퍼스 2기 BE

[카카오 테크 캠퍼스 / BE] 첫 번째 미니과제, 숫자 야구 게임⚾

2024. 5. 27. 20:40
목차
  1. 과제 진행 요구 사항
  2. 기능 요구 사항
  3. 실행 결과
  4. 프로그래밍 요구사항
  5. 기능 목록 작성하기📄
  6. 구현 방향
  7. Number
  8. Game
  9. InputOutput
  10. BaseballUtil
  11. Validate
  12. 부족한 점😥
  13. 과제 진행 소감🎓
  14. 받은 피드백🍫
반응형

 

 

 

안녕하세요. 카카오 테크 캠퍼스 첫 번째 미션이 나왔습니다. 이 미션은 과제 진행 요구 사항, 기능 요구 사항, 프로그래밍 요구 사항으로 구성되어 있었습니다. 

 

 

과제 진행 요구 사항

  • 숫자 야구 repo를 fork 한 뒤, 클론한다.
  • 기능을 구현하기 전에 README.md 파일에 구현할 기능 목록을 작성한다.
  • 기능 단위로 커밋하는 방식으로 진행한다.

 

기능 요구 사항

  • 숫자 야구 게임은 1 ~ 9까지의 서로 다른 수로 이루어진 세 자리 수를 맞추는 게임이다.
  • 같은 수 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱이라는 힌트를 얻고, 그 힌트를 이용해서 상대방의 수를 맞추면 승리한다.
  • 숫자 야구 게임에서 상대방의 역할은 컴퓨터가 한다.
  • 과정을 반복해 컴퓨터가 선택한 세자리 숫자를 모두 맞히면 게임이 종료된다.
  • 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다.
  • 사용자가 값을 잘못 입력한 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료된다.

 

 

실행 결과

 

 

프로그래밍 요구사항

  • JDK 17 버전에서 실행 가능해야 한다.
  • 프로그램 실행 시작점은 Application 의 main() 이다.
  • build.gradle 파일은 변경할 수 없으며, 제공된 라이브러리 이외의 외부 라이브러리는 사용하지 않는다.
  • 프로그램 종료 시 System.exit() 을 호출하지 않는다.
  • 프로그램 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 등의 이름을 바꾸지 않는다.
  • 자바 코드 컨벤션을 지키면서 프로그래밍한다.
  • 3항 연산자를 사용하지 않는다.
  • 함수가 한가지 일만 하도록 최대한 작게 만든다.
  • indent는 depth를 3이 넘지 않도록 구현한다.
  • JUnit5와 AssertJ를 이용하여 정리한 기능 목록이 정상적으로 작동하는 지 테스트 코드로 확인한다.

 

깃 커밋은 아래 이미지를 참고하여 작성했습니다. 

 

 

기능 목록 작성하기📄

위의 요구 사항을 본 뒤, 저는 숫자 야구 게임의 기능 목록을 작성했습니다.

# ⚾숫자 야구 게임⚾
## 📃기능 목록📃

### 임의의 숫자 생성
- [x] 자바 util을 사용해 임의의 세자리 수 생성

### 입출력 기능
- [x] 게임 시작에 대한 출력
- [x] 숫자 세 자리 입력
- [x] 입력된 정보에 볼, 스트라이크, 낫싱 정보를 출력
- [x] 사용자가 숫자를 맞힐 경우 게임을 다시 시작하거나 종료를 구분하는 입력

### 스트라이크, 볼 확인 - 메서드로 제작
- [x] 같은 숫자, 같은 자리 -> 스트라이크 
- [x] 같은 숫자, 다른 자리 -> 볼
- [x] 다른 숫자 -> 낫싱

### IllegalArgumentException 발생
- [x] 사용자 입력 값이 숫자가 아닌 경우
- [x] 사용자 입력 값이 세자리 수가 아닌 경우
- [x] 게임 종료 후, 사용자 입력 값이 0 또는 1이 아닌 경우
- [x] 사용자 입력 값에 중복된 값이 있을 경우
- [x] 사용자 입력 값이 null 인 경우

 

 

 

구현 방향

프로그래밍 요구 사항을 보면 메서드는 한 가지 일만 하도록 만들라는 지시가 있었습니다. 따라서, 기능에 따른 클래스를 정의하고 각 클래스의 구현할 메서드에 대해서 정리해보려고 합니다.

최대한 하나의 메서드가 하나의 기능을 처리할 수록 설계해보려고 하는데 그 기준을 어디로 잡아야할 지 감이 오지 않았습니다. 만일, game 클래스를 만들어서 start하는 메서드가 있을 때, 이 start라 함은 게임을 시작하는 output, input 만을 의미하는지 아니면 이 게임이 진행되게 만들어야 하는지 또한, 게임이 진행되게 만든다면 이 후 끝날 때까지 start() 메서드에서 처리 해야 할 지 의문이 들었습니다.

하지만, 줏대를 갖고 설계해서 구현한 뒤에 멘토님 또는 주변 분들께 피드백 받고자 했습니다.

 

 

Number

  • create() : 임의의 숫자 세 개 생성하는 메서드

 

Game

  • start()

 

InputOutput

  • startOutput
  • restartOutput
  • numberInput
  • yesOrNoInput
  • hitterResultOutput
  • endOutput

 

BaseballUtil

  • strike()
  • ball()

 

 

Validate

  • numberValidate - 입력 값 판단
  • yesOrNoValidate - 게임 재시작 입력 값 판단

 

 

부족한 점😥

설계를 진행할 때, 논리적인 이유 없이 감으로 이건 나눠야 할 것 같고, 이건 합치면 될 것 같고 라는 사고 과정으로 진행 했던 것이 아쉬움에 남았습니다. 객체 지향 설계에 대한 공부가 필요함을 많이 느꼈던 과제였습니다.

구현에 있어서는 Game 클래스의 start() 메서드는 남들은 알아보기 어려울 것 같습니다. 일부분 하드 코딩된 부분이 있어서 어떻게 하면 가독성 있고 좀 더 좋은 방법이 될 수 있는지 공부하고 수정하는 시간을 가져봐야 할 것 같습니다.

 

 

과제 진행 소감🎓

과제가 나온 뒤, 요구 사항을 보면서 기능 목록을 작성하고 기능 단위로 클래스를 분리해보고자 했습니다. 그러나 이 과정이 생각보다 쉽지 않았습니다. 만일 Game 클래스를 만들고 start()라는 메서드를 활용하여 실행한다면 이 start()에서 모든 과정을 처리 해야 하는지 분리를 해야 하는지 판단하기 어려웠습니다.

스프링 부트를 활용해서 백엔드 개발을 할 때에는 controller로 요청이 들어오고 이 요청을 service에서 처리하고 결과를 반환한다는 과정이 정해져 있었는데 이런 프로젝트의 경우에는 항상 main에서 모두 처리해왔기 때문입니다.

그래서 논리적인 이유보다는 감으로 이건 나눠야 할 것 같고, 이건 합치면 좋을 것 같다는 사고 과정으로 진행했고 아쉬움이 남았습니다. 객체 지향 설계에 대한 공부가 많이 필요함을 느꼈던 과제였습니다.

구현에 있어서는 Game 클래스의 start() 메서드는 타인이 알아보기 어려울 것 같았습니다. 또한, 일부분은 하드 코딩된 것이 있어서 어떻게 하면 가독성 있고 깔끔하게 코드를 작성할 수 있을지 공부하고 이 후 수정하는 시간을 가져야겠다고 생각했습니다.

 

 

받은 피드백🍫

input, output 도 나눠야 한다는 피드백을 받았습니다. View를 처리함에 있어서 input, output이 비슷한 기능이라고 생각했는데 아니었던 것 같습니다. 앞으로는 이 또한 나눠야하겠다고 느꼈습니다. 

 

 

 

https://github.com/pkyung/java-baseball-precourse/tree/pkyung

 

GitHub - pkyung/java-baseball-precourse

Contribute to pkyung/java-baseball-precourse development by creating an account on GitHub.

github.com

 

반응형
저작자표시 (새창열림)

'🍫카카오 테크 캠퍼스 2기 BE' 카테고리의 다른 글

[카카오 테크 캠퍼스 / BE] 2단계 첫 번째 코드 리뷰 후기  (0) 2024.07.02
[카카오 테크 캠퍼스 / BE] 두 번째 미니과제, 자동차 경주🚗  (1) 2024.06.10
[카카오 테크 캠퍼스 / 2기] '웰컴 키트' 라는 것을 받다  (0) 2024.05.14
[카카오 테크 캠퍼스] 1단계 4주차 학습 일지  (0) 2024.05.12
[카카오 테크 캠퍼스] 1단계 3주차 학습 일지  (1) 2024.05.02
  1. 과제 진행 요구 사항
  2. 기능 요구 사항
  3. 실행 결과
  4. 프로그래밍 요구사항
  5. 기능 목록 작성하기📄
  6. 구현 방향
  7. Number
  8. Game
  9. InputOutput
  10. BaseballUtil
  11. Validate
  12. 부족한 점😥
  13. 과제 진행 소감🎓
  14. 받은 피드백🍫
'🍫카카오 테크 캠퍼스 2기 BE' 카테고리의 다른 글
  • [카카오 테크 캠퍼스 / BE] 2단계 첫 번째 코드 리뷰 후기
  • [카카오 테크 캠퍼스 / BE] 두 번째 미니과제, 자동차 경주🚗
  • [카카오 테크 캠퍼스 / 2기] '웰컴 키트' 라는 것을 받다
  • [카카오 테크 캠퍼스] 1단계 4주차 학습 일지
pkyung
pkyung
pkyung
성장하는 중
pkyung
전체
오늘
어제
  • 분류 전체보기
    • 🏆토이 프로젝트에서 생긴 일
    • 🤿백엔드 내실 채우기
    • 🍫카카오 테크 캠퍼스 2기 BE
    • 🍀spring
      • 스프링 입문
      • 스프링 핵심원리 기본
      • 스프링 jpa
      • 🐛debug
    • 🔒보안
    • 🌎infra
      • docker
      • kubernetes
      • cloud
    • 🌐web
      • HTTP 웹 기본 지식
    • 🔑알고리즘
      • baekjoon
      • programming language
    • 🎞️프로젝트
      • android
      • flutter
    • 📚수업
      • 교양과목
    • 💾database
    • ⚙settings
    • 2023 여름 모각코 - 절개와지조
    • 2024 겨울 모각코 - 내 장점은 algorit..

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • python
  • sql
  • 파이썬
  • Security
  • mysql
  • 백준
  • 소수
  • 문자열
  • 카테캠
  • 코드리뷰
  • 스택
  • be
  • 카카오테크캠퍼스
  • nginx
  • 데이터베이스
  • JPA
  • 자바
  • 객체지향
  • springboot
  • 김영한
  • 스프링부트
  • HTTP
  • 자바문자열
  • 스프링
  • spring
  • 객체지향의사실과오해
  • BFS
  • Docker
  • Java
  • 스프링기본

최근 댓글

최근 글

hELLO · Designed By 정상우.
pkyung
[카카오 테크 캠퍼스 / BE] 첫 번째 미니과제, 숫자 야구 게임⚾
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.