-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[로또] 박세연 미션 제출합니다. #1
base: SEYEON-PARK
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
먼저 고생하셨습니다!
코드를 보면서 오히려 제가 더 배워가는 거 같아욤 !! 💯 전반적으로 큰 문제 없이 잘 읽혔습니다 👍 👍 👍 👍
첫번쨰 질문 <-
일단 제가 TDD를 많이 경험해 보지 못했기 떄문에 명확한 답은 드리기 힘들수도 있지만,
TDD는 코드를 작성하기 전 테스트 코드를 적는 것을 의미해요!
보통은 예상치 못한 버그를 잡기 위해 TDD를 사용하게 됩니다!
언제 TDD를 도입하고, 왜 TDD를 사용해야 하는지 알기 이전에 무엇을 테스트해야하는지
부터 정하는 게 중요할 것 같아요!
팀마다 처한 상황이 다르고, 무엇을 테스트할지에 대한 기준도 서로 다르기 때문에,
팀의 논의가 꼭 필요할 것 같습니다..!
두번째 질문<-(지극히 개인적인 의견입니다..!)
요것도 처한 상황에 따라 다를 것 같긴 합니다! 당장 요구사항이 많고 빠듯한 일정이라면,
어떻게든 요구사항을 만족시키고 기능을 구현하는 것이 최우선이라고 생각해요
(구현 후 한번씩 기술부채나 리팩토링을 할 수도 있겠죠?!)
out_of_range_bonus: '[ERROR] 보너스 번호는 1부터 45 사이의 숫자여야 합니다.', | ||
duplicate_bonus: | ||
'[ERROR] 보너스 번호는 로또 번호랑 중복된 숫자를 입력하면 안됩니다.', | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
너무 깔끔합니다.. 👍 에러 유형별로(구입금액 입력, 당첨번호 입력, 보너스번호 입력) 별로 한 깊이 더 객체가 만들어질 수도 있을 것 같아요!
또 요렇게 전역적으로 에러 상수를 관리할 수도 있지만 , 폴더 별로 관리할 수도 있습니다!
(폴더 별로 해당 폴더 안의 상수들을 관리하는 용도)
그래서 상황에 따라 적절한 방법을 골라서 사용하면 될 것 같아요!
prize: 5000, | ||
message: '3개 일치 (5,000원) - ', | ||
}, | ||
FOURTH: { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
console.log(LOTTO_RESULT.FOURTH.bonus);
LOTTO_RESULT.FOURTH.bonus = true;
console.log(LOTTO_RESULT.FOURTH.bonus);
요 결과는 어떻게 나올까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
처음에는 두 가지 때문에 안 바뀔 거라고 생각했었습니다.
- const 때문에 안 될 것이다.
- Object.freeze() 때문에 안 바뀔 것이다.
이렇게 생각했었는데 생각해보니 1번은 객체의 참조 주소만 바뀌지 않으면 가능할 것 같았습니다. 그리고 직접 해보니 바뀌는 걸 알 수 있었습니다.
그래서 왜 바뀌는지 궁금해서 찾아보니, 2번도 얕은 동결만 되고 있고, 깊은 동결이 되지 않아 객체 안의 값이 바뀔 수 있다는 걸 알 수 있었습니다! 감사합니다 :)
src/Lotto.js
Outdated
#validate(numbers) { | ||
if (numbers.length !== 6) { | ||
throw new Error("[ERROR] 로또 번호는 6개여야 합니다."); | ||
changeStringToArray(inputNumbers) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
map메소드를 사용한다면 어떻게 바꿀 수 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
changeStringToArray
는 범용적으로 쓸 수 있는 함수일 것 같은데요!
요 함수가 꼭 이곳에 위치해야 할까요?
사용하는 입장에서 문자열 -> 배열
로 바꾸는 함수를 사용하려면 lotto객체를 만들어야만 사용할 수 있는데,
해당 방법이 바람직할까요 ?!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네! 참고하여 수정하였습니다~
import LottoGenerator from './LottoGenerator.js'; | ||
|
||
class Game { | ||
constructor() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 사용하면 사용하는 바깥에서 맘대로 멤버변수를 제어할 수 있게 됩니당.
예를 들어 Game클래스로 만든 인스턴스를 사용하는 바깥에서는
const game = new Game();
game.purchase = 6;
console.log(game.purchase);
다음과 같이 맘대로 멤버변수에 접근하고 수정할 수 있어요!
Game의 규칙이 잘 지켜지도록, 바깥에서 조작할 수 없도록 하려면 어떻게 하면 좋을까요?!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
앞에 #을 붙이면 될 것 같아요! 제가 생각한 게 맞을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
맞습니당 👍
import { Random } from '@woowacourse/mission-utils'; | ||
import { LOTTO } from './constants/Constants.js'; | ||
|
||
const LottoGenerator = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요부분은 클래스로 구현하지 않고 객체로 구현한 이유가 있을까욤?!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분은 다른 팀원분이 작성해주신 부분이라 잘 모르겠습니다..! 물어보고 이유가 있으면 추가해서 댓글 달아놓을게요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
물어보니 큰 이유는 없는 것 같아요! 클래스로 구현하는 게 더 통일성 있고 좋을까요?
src/Statistics.js
Outdated
import { LOTTO_RESULT } from './constants/Constants.js'; | ||
|
||
class Statistics { | ||
#results = { 3: 0, 4: 0, 5: 0, '5+1': 0, 6: 0 }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요부분은 상수로 따로 뺴시지 않은 이유가 궁금합니당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
생각을 못 했는데 상수로 빼면 좋을 것 같아 그렇게 수정했습니다!
this.winningNumber = winningNumber; | ||
this.bonusNumber = bonusNumber; | ||
// this.#statistics = statistics; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요부분도 외부에서 멤버변수를 조작할 수 있을 것 같은데 어떻게 방지할 수 있을까요?!
const statistics = new Statistics(
this.lottos,
this.winningNumbers,
this.bonusNumber
);
statistics.bonusNumber = 'Hi!'
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
외부에서 멤버 변수를 조작할 수 없도록 구현 수정했습니다!(#을 이용했어요)
src/Statistics.js
Outdated
} | ||
|
||
calculateRank(matchNumber, lotto) { | ||
if (matchNumber >= 3) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요기서 관리하는 3,5도 의미있는 숫자 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네! 상수로 선언했습니다!
실행 과정
이번 페어 미션은 세 명이서 진행해서 지금까지 진행했던 거와는 느낌이 달랐습니다. 더욱 다양한 의견을 들을 수 있어서 좋았습니다. 하지만, 다양한 의견이 있었던 만큼 진행하는 시간도 더 걸릴 수밖에 없었습니다. 특히 이번에는 테스트 주도 개발(TDD)도 시도해보고자 했기에 더 시간이 오래 걸렸다고 생각합니다.
느낀 점
이번 미션은 TDD도 하고, 두 명의 페어와 함께 했기 때문에 시간이 많이 들었습니다. 3~4일 동안 매일 디스코드로 만나서 했어서 체력적으로 지치기도 했지만, 페어들과 함께 문제를 해결하는 과정이 재밌었습니다. 이번에는 메시지나 상수들도 다 파일에 선언해서 사용했는데, 이렇게 해본 건 처음이라 어색했습니다. 하지만, 실제 개발에서는 잘 사용되는 방법일 것 같아서 익숙해지면 좋겠다고 생각했습니다.
배운 점
: 한 파일 안에 여러 개 export하면 import 할 때 {} 해야만 한다! 한 파일에 한 개 export하면 export default라고 적어주고, import할 때 {} 안 적어줘야 한다!
: 이러면 forEach()도 이용 가능!
: 개발자가 형변환해주고 매개변수에 대입해야 잘 작동한다.(Number.isNaN(Number(a)); 이런 식으로!)
궁금한 점