본문 바로가기
💾 Backend/우아한 테크코스-프리코스

🪐우테코 프리코스🪐 - 2주차 과제🔭

by 정람지 2023. 10. 26.

개미는(뚠뚠)🐜🐜오늘도(뚠뚠)🐜🐜열심히 일을 하네(뚠뚠)🐜🐜개미는(뚠뚠)🐜🐜언제나(뚠뚠)🐜🐜열심히일을하네(뚠뚠)

(해당 주차 비공개했습니다)


🚀 기능 요구 사항

초간단 자동차 경주 게임을 구현한다.

  • 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.⭕️
  • 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.⭕️
  • 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.⭕️
  • 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.⭕️
  • 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우이다.⭕️
  • 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.⭕️
  • 우승자가 여러 명일 경우 쉼표(,)를 이용하여 구분한다.⭕️
  • 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다.⭕️

🎯 프로그래밍 요구 사항

  • JDK 17 버전에서 실행 가능해야 한다. JDK 17에서 정상적으로 동작하지 않을 경우 0점 처리한다.⭕️
  • 프로그램 실행의 시작점은 Application의 main()이다.⭕️
  • build.gradle 파일을 변경할 수 없고, 외부 라이브러리를 사용하지 않는다.⭕️
  • Java 코드 컨벤션 가이드를 준수하며 프로그래밍한다. ❌시험완전끝나고다음주에공부ㄱㄱ
  • 프로그램 종료 시 System.exit()를 호출하지 않는다.⭕️
  • 프로그램 구현이 완료되면 ApplicationTest의 모든 테스트가 성공해야 한다. 테스트가 실패할 경우 0점 처리한다.⭕️
  • 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 이름을 수정하거나 이동하지 않는다.⭕️

추가된 요구 사항

  • indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다.⭕️
    • 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.⭕️
    • 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다.⭕️
  • 3항 연산자를 쓰지 않는다.⭕️
  • 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라.⭕️
  • JUnit 5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다.
    • 테스트 도구 사용법이 익숙하지 않다면 test/java/study를 참고하여 학습한 후 테스트를 구현한다.

라이브러리

  • JDK에서 제공하는 Random 및 Scanner API 대신 camp.nextstep.edu.missionutils에서 제공하는 Randoms 및 Console API를 사용하여 구현해야 한다.⭕️
    • Random 값 추출은 camp.nextstep.edu.missionutils.Randoms의 pickNumberInRange()를 활용한다.⭕️
    • 사용자가 입력하는 값은 camp.nextstep.edu.missionutils.Console의 readLine()을 활용한다.⭕️

✏️ 과제 진행 요구 사항

  • 미션은 java-racingcar-6 저장소를 Fork & Clone해 시작한다.⭕️
  • 기능을 구현하기 전 docs/README.md에 구현할 기능 목록을 정리해 추가한다.⭕️
  • Git의 커밋 단위는 앞 단계에서 docs/README.md에 정리한 기능 목록 단위로 추가한다.-😐음..중간에좀많이바뀌긴햇는데..ㅜ
    • 커밋 메시지 컨벤션 가이드를 참고해 커밋 메시지를 작성한다.❌시험완전끝나고다음주에공부ㄱㄱ
  • 과제 진행 및 제출 방법은 프리코스 과제 제출 문서를 참고한다.⭕️

☄️ UML ☄️

초안 -> 수정 -> 최종


☄️ 1차 구현 ☄️

 

🛸 객체지향 생활체조 원칙 🛸

( if else 문도 사용 자체 ) 보호 절 ( gaurd clause ) 전략 패턴 ( strategy pattern ) 널 객체 패턴 ( null object pattern ) switch- case 문 사용 도 똑같은 문제!! ⭐️ 3. 모든 원시값과 문자열을 포장(wrap)한다. ⭐️ 

junggoldchae-coding.tistory.com

생활체조원칙을 공부했다.. 와.. 띠용하는 게 넘 많아용

1주차과제 위배되는 거 천지


COMMIT - 파일 기본 세팅 및 부가 기능 - Display(입출력),Const(상수),Utility(API) 구현


COMMIT - McPlayer (게임 시작 문구-자동차이름,시도횟수 출력,입력받기) 1차 구현


COMMIT - ManagePlayer ( 최종 자동차 달린 거리 수합 및 전달) 1차 구현 & 싱글톤 전환 & 기타 변경 사항 구현


COMMIT - JudgePlayer(우승자 가려내기, 출력하기) 1차 구현 & 싱글톤 삭제 & 기타 변경 사항 구현


COMMIT - RacingPlayer(랜덤 전진) 구현 & ManagePlayer(시도 횟수만큼 RacingPlayer play시키기) 추가 구현 & 기타 변경 사항 구현


COMMIT - 플레이어 이름 정의 안 된 부분 수정, 1차 완성


COMMIT - McPlayer에서 자동차이름 입력받는 메소드에 5자 이상 불가조건 예외처리메소드 추가 => 테스트 통과


COMMIT - ⌥⌘L 코드 자동 정렬 기능 사용


COMMIT -전체적인 함수명 수정, ing 없애기, say->output, get -> input, 등


COMMIT - README 파일 수정, class UML 추가


COMMIT -시도 횟수 1 이하 오류 예외 처리 추가"


COMMIT -테스트코드 추가


☄️ 수정 ☄️

- 자동차들은 몇 개 생길지모르지만 ㅍ ㅏㄴ단자랑 mc랑은 하나잖아! 둘의 차이를 줘보고자 하나인 애들을 싱글톤으로 만들어 볼까?

=> 말도안되는 스태틱천지 

아...싱글톤회수.. 다시 다 뜯어고쳐..

=> JudgePlayer가 어떻게 ManagePlayer한테 값을 받을 수 있을지 고민하다가(play() 하나로 ) 한 건데 ㅠㅠ흠

=> 음 그러면 Mc랑 Judge를 먼저 생성한 후에 Manage 생성자로 넘기자! 그럼 깔끔play코드가능?

 

? integer 과 int를 써야 하는 적합한 곳? 박싱언박싱박박박

 

- 예외처리하기 ⭕️

- Test코드 돌리기 ⭕️

윽꺄악 멍청아악 왜 Null이 나올까? 하면서 뒤엡부터 하나씩 찍어가면서 봤는ㄷ

애초애 선언도 안했잖아~!~!~ 아악 distance가 name인줄알았네 으아악

새벽 3시라서 제정신이 아닌 듯


일단 테스트 통과..


☄️ 체크사항 체크하기 ☄️

우테코 1주차 피드백 부분 ✅

지원자분들 코드리뷰 부분 

내 계획 

README 만들기

UML 다시그리기

기능 요구사항 체크 

프로그래밍 요구사항 체크 

과제진행 요구사항 체크 

자바독/이름 다시 전체적 수정

우테코코드스타일적용하기

테스트! JUnit5, AssertJ 사용하기 ( test/java/study 참고)



기여운정화언니 우리 모두 시험기간폐인

내일도 뚠뚠 시스템소프트웨어실습시험이 뚠뚠

오늘도 뚠뚠 공도밤샘을 뚠뚠