Skip to content

[1주차] 천동현 숫자 야구 게임 기능 구현 미션 제출합니다#41

Merged
ChangwooJ merged 13 commits intogreedy-team:realcdhfrom
realcdh:main
Mar 26, 2026
Merged

[1주차] 천동현 숫자 야구 게임 기능 구현 미션 제출합니다#41
ChangwooJ merged 13 commits intogreedy-team:realcdhfrom
realcdh:main

Conversation

@realcdh
Copy link
Copy Markdown

@realcdh realcdh commented Mar 17, 2026

안녕하세요. 4기 FE 천동현(@realcdh)입니다.

작일 받은 피드백 반영하여 새로운 PR 제출합니다(작일 피드백 받은 PR은 제대로 된 위치가 아니라 생각하여 closed 했습니다..!)

먼저 기능 구현 부분입니다.

📄구현 기능

  1. 임의의 숫자 생성
  • 1에서 9까지 서로 다른 임의의 수 3개를 선택한다.
    컴퓨터의 랜덤 값은 반드시 JavaScript의 Math.random 대신 MissionUtils 라이브러리의 Random.pickNumberInRange를 사용해 구한다.
  1. 유효한 값 입력받기
  • 1에서 9까지 서로 다른 수 3개
  • 사용자가 잘못된 값을 입력한 경우 alert으로 에러 메시지를 보여주고, 다시 입력할 수 있게 한다.
  1. 정답 검사
  • 스트라이크: 같은 수가 같은 자리에 있을 때
  • 볼: 같은 수가 다른 자리에 있을 때
  • 낫싱: 같은 수가 전혀 없을 때
  • 정답 여부 반환
  1. 게임의 종료
  • 임의의 숫자 3개를 모두 맞출 경우 게임 종료
  • 게임 종료 시 재시작 버튼 노출
  1. 재시작
  • 재시작 버튼 클릭 시 게임 재시작

♻️디자인패턴

##MVC 패턴
#MVC 디자인 패턴을 적용했습니다

  • model: model.js로 기본적인 기능들을 구현했으며, utils/validation.js에 숫자의 유효성과 중복을 검증하는 기능을 구현했습니다.
  • view: 입력 뷰인 views/InputView.js와 출력 뷰인 views/OutputView.js로 나눠 구현했습니다.
  • controller: Controller.js로 구현했습니다.
    MVC 패턴 커밋을 푸시하는 과정에서 전체 프로젝트가 다 날라가서 처음부터 다시 작성하는 슬픈 일이 있었습니다.. ㅠ

🙋질의사항

  • 변수 및 함수의 작명
    #변수 및 함수의 이름을 작명하며 많은 고민을 했습니다. 예를 들어, 볼의 개수를 ball 로만 할지 ballCount로 할지 부터 시작하여 에러 메시지를 띄워주는 함수를 **showError(error)**로 할지 renderErrorMessage(errorMessage) 등으로 할지... -> 리뷰어님께서는 이러한 고민을 어떻게 해결하시는지 궁금합니다!

긴 글 읽어주셔서 감사합니다.
요즘 꽃샘 추위가 기승을 부리는데 건강 잘 챙기셔서 좋은 봄 맞이하시기 바랍니다 :)

Copilot AI review requested due to automatic review settings March 17, 2026 06:24
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

숫자 야구 게임을 브라우저에서 동작하도록 MVC 구조로 구성하고, 입력/출력(View), 게임 로직(Model), 이벤트 흐름(Controller)을 분리해 구현한 PR입니다.

Changes:

  • Controller/View/Model로 역할을 분리해 게임 진행 및 UI 업데이트 흐름을 구성
  • 입력값 유효성 검사 로직을 utils/validation.js로 분리
  • HTML에서 결과 영역/재시작 버튼 초기 상태 및 submit 버튼 동작(type) 조정

Reviewed changes

Copilot reviewed 8 out of 9 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
src/views/OutputView.js 결과 출력/에러 알림/재시작 버튼 노출 및 바인딩 처리
src/views/InputView.js 입력 제출 이벤트 바인딩 및 입력 초기화
src/utils/validation.js 입력값(숫자/길이/중복) 유효성 검사 유틸 추가
src/model.js 랜덤 숫자 생성 및 볼/스트라이크 계산 로직 구현
src/controller.js submit/restart 이벤트를 받아 model-view를 연결하는 제어 흐름 구현
src/index.js 컨트롤러 엔트리포인트 생성
index.html submit 버튼 type 지정, 결과 영역 초기화, 재시작 버튼 텍스트 조정
docs/README.md 구현 기능 목록 및 테스트 결과 문서화

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/controller.js Outdated
}

onRestart() {
this.model.init();
Comment thread src/utils/validation.js
Comment on lines +3 to +6
// 숫자가 아닌 경우
for (let i = 0; i < inputNumber.length; i++) {
if ('0' > inputNumber[i] || inputNumber[i] > '9') {
throw new Error('숫자를 입력해 주세요.');
Comment thread src/model.js
Comment thread src/model.js
Comment thread docs/README.md
Comment thread docs/README.md
Comment on lines +1 to +24
##📄구현 기능 목록
###1. 임의의 숫자 생성
- 1에서 9까지 서로 다른 임의의 수 3개를 선택한다.
- 컴퓨터의 랜덤 값은 반드시 JavaScript의 Math.random 대신 MissionUtils 라이브러리의 Random.pickNumberInRange를 사용해 구한다.

###2. 유효한 값 입력받기
- 1에서 9까지 서로 다른 수 3개
- 사용자가 잘못된 값을 입력한 경우 alert으로 에러 메시지를 보여주고, 다시 입력할 수 있게 한다.

###3. 정답 검사
- 스트라이크: 같은 수가 같은 자리에 있을 때
- 볼: 같은 수가 다른 자리에 있을 때
- 낫싱: 같은 수가 전혀 없을 때
- 정답 여부 바환

###4. 게임의 종료
- 임의의 숫자 3개를 모두 맞출 경우 게임 종료
- 게임 종료 시 재시작 버튼 노출

###5. 재시작
- 재시작 버튼 클릭 시 게임 재시작


###📝테스트 결과
Comment thread src/model.js Outdated
Comment on lines +1 to +26
import {isDuplicate, checkValidity} from './utils/validation.js';

export default class BaseballGame {
constructor() {
this.randomNumber = this.getRandomNumber();
}

getRandomNumber() {
const tempArr = [];

while (tempArr.length < 3) {
const tempNumber = MissionUtils.Random.pickNumberInRange(1, 9);
tempArr.push(tempNumber);

if(isDuplicate(tempArr)) {
tempArr.pop();
}
}

console.log("RandomNumber: "+ tempArr)
return tempArr;
}

checkValidity(inputNumber) {
checkValidity(inputNumber);
}
Comment thread src/controller.js
Comment on lines +32 to +36
onRestart() {
this.model.init();
this.inputView.clearInput();
this.outputView.clearResult();
}
@realcdh realcdh changed the title [1주차] 숫자 야구 게임 기능 구현 미션 제출합니다 [1주차] 천동현 숫자 야구 게임 기능 구현 미션 제출합니다 Mar 18, 2026
@ChangwooJ ChangwooJ requested review from ChangwooJ March 18, 2026 16:59
@ChangwooJ
Copy link
Copy Markdown

ChangwooJ commented Mar 18, 2026

안녕하세요, 동현님!
이미 인사드렸지만, 저는 그리디 4기 프론트엔드 스터디의 리드이자 리뷰어 정창우라고 합니다. 만나서 반갑습니다😊

Git을 다루는게 쉬운 일은 아니죠.. PR도 그렇고 커밋이 다 날아가는 경험을 했다니 마음이 아픕니다 ㅠㅠ
그래도 이 경험을 통해 어떤 명령어가 위험한지, 또, 어떻게 간단히 바꿔볼 수 있었는지 등을 얻어가셨을거라고 생각해요~!
또, 처음 배우는 입장일수록 꼼꼼히 공부해보고 과감하게 사용해보아야 한다고 생각합니다.
예시로 저도 커밋을 여러번 날려먹은 뒤로 생소한 명령어를 쓰는게 무서워서 git stash를 사용하지 않았었는데, 저처럼 초반에 사용해보지 않으면 나중에 생소한 명령어를 사용해보기 위해 더 많은 리스크를 감당해야할 수도 있거든요..!


변수 및 함수의 이름을 작명하며 많은 고민을 했습니다. 예를 들어, 볼의 개수를 ball 로만 할지 ballCount로 할지 부터 시작하여 에러 메시지를 띄워주는 함수를 **showError(error)**로 할지 renderErrorMessage(errorMessage) 등으로 할지... -> 리뷰어님께서는 이러한 고민을 어떻게 해결하시는지 궁금합니다!

저는 의미를 충분히 전달할 수 있는 네이밍이 좋은 네이밍이라고 생각해요!
예를 들면,

const tempNumber = MissionUtils.Random.pickNumberInRange(1, 9);  // 임시 숫자(직역)

const pickedNumber = MissionUtils.Random.pickNumberInRange(1, 9);  // 뽑힌 숫자

(좋은 예시일지 모르겠지만) 이런 식으로 의미가 있는 단어를 붙인다거나,

showError(errorMessage){} // 모든 에러 메시지인가?

renderErrorMessage(errorMessage){} // 아, 랜더 과정에서의 에러 메시지인가보다

좀 더 어떤 역할을 하는 변수/함수 인지 특정할 수 있도록 네이밍을 해주시면 좋을거 같아요.

조금 더 설명을 보태자면, 자신이 설계하고 작성한 코드는 스스로 알아보기 쉽지만, 동료가 읽게될 때에는 당연히 파악하기 어려워요.
그렇다면 작성자가 아주 조금의 리소스만 들이게 된다면, 동료는 이 변수/함수가 어떤 역할을 하는지 파악하는 데 사용되었어야할 엄청난 리소스를 아낄 수 있겠죠? 작성되는 시간보다 읽히는 시간이 훨씬 더 길기 때문이에요.

코드를 읽는 사람의 입장에서 변수명이 의미를 파악하는데 도움을 준다면 길어도 환영할거라고 생각해요!!


이번에는 첫 미션인만큼 미션의 요구사항과 MVC 패턴을 위주로 살펴보고자 했어요.
각 기능이 최소한의 역할을 수행하도록 잘 분할해주셔서 코드를 읽기 수월했습니다:)
아래에 제가 생각한 수정 포인트와 궁금한 점을 적어보았으니 확인해주세요~~!

Comment thread src/controller.js Outdated
Comment thread src/model.js
Comment thread src/model.js Outdated
Comment thread src/model.js
Comment thread src/utils/validation.js Outdated
Comment thread src/views/InputView.js
Comment thread src/views/OutputView.js Outdated
Comment thread src/views/OutputView.js
Copy link
Copy Markdown

@ChangwooJ ChangwooJ left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수정되면 좋을 부분들을 전부 잘 반영해주셨네요!
마지막으로 ==만 생각하신대로 수정해보시고, createResultMessage에 성공 기준에 ball만 빼면 될거 같아요!

더 궁금하거나 의아한 점이 있다면 말씀해주세요~
일단 approve 하겠습니다:)

@ChangwooJ ChangwooJ merged commit 7df8d7e into greedy-team:realcdh Mar 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants