Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
4f3dfba
docs: κ΅¬ν˜„ν•  κΈ°λŠ₯ λͺ©λ‘ μž‘μ„±
tjdakf Mar 4, 2026
3bbf654
feat: 덱 생성 κΈ°λŠ₯ 및 ν…ŒμŠ€νŠΈ μΆ”κ°€
tjdakf Mar 4, 2026
63f556a
feat: 덱 μ…”ν”Œ κΈ°λŠ₯ 및 ν…ŒμŠ€νŠΈ μΆ”κ°€
tjdakf Mar 4, 2026
33badfd
refactor: νŒ¨ν‚€μ§€ 이동
tjdakf Mar 4, 2026
e3e2962
test: ν”Œλ ˆμ΄μ–΄ 등둝 ν…ŒμŠ€νŠΈ μΆ”κ°€
tjdakf Mar 4, 2026
c885805
feat: ν”Œλ ˆμ΄μ–΄ 등둝 κΈ°λŠ₯ μΆ”κ°€
tjdakf Mar 4, 2026
0a84a82
feat: λ”œλŸ¬ 생성
tjdakf Mar 4, 2026
47dd596
feat: μΉ΄λ“œ 돌리기 κΈ°λŠ₯ μΆ”κ°€
tjdakf Mar 4, 2026
6975c3f
feat: J, Q, K, A 점수 처리 κΈ°λŠ₯ μΆ”κ°€
tjdakf Mar 4, 2026
a806680
refactor: ν…ŒμŠ€νŠΈ μ½”λ“œ λ¦¬νŒ©ν† λ§
tjdakf Mar 4, 2026
426d150
refactor: νŒ¨ν‚€μ§€ 이동
tjdakf Mar 4, 2026
cb34963
test: μΉ΄λ“œ 점수 ν•©μ‚° ν…ŒμŠ€νŠΈ μΆ”κ°€
tjdakf Mar 4, 2026
fddb58f
feat: μΉ΄λ“œ 점수 ν•©μ‚° κΈ°λŠ₯ μΆ”κ°€
tjdakf Mar 4, 2026
969d642
test: Ace 처리 ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€
tjdakf Mar 4, 2026
2039b00
feat: Ace 처리 κΈ°λŠ₯ μΆ”κ°€
tjdakf Mar 4, 2026
2892a54
refactor: 점수 계산 κΈ°λŠ₯ 톡합
tjdakf Mar 4, 2026
1a8250b
feat: λ²„μŠ€νŠΈ νŒμ • κΈ°λŠ₯ κ΅¬ν˜„
tjdakf Mar 4, 2026
0610c26
feat: μ‹€ν–‰ κΈ°λŠ₯ μ—°κ²°
tjdakf Mar 4, 2026
d9861e2
refactor: ν”Œλ ˆμ΄μ–΄ 등둝 및 κ²Œμž„ μ€€λΉ„ ꡬ쑰 κ°œμ„ 
tjdakf Mar 5, 2026
c876868
test: κ²Œμž„ μ΄ˆκΈ°ν™” 데이터 전달 ν…ŒμŠ€νŠΈ μΆ”κ°€
tjdakf Mar 5, 2026
e4516ed
feat: κ²Œμž„ 초기 데이터 전달 κΈ°λŠ₯ μΆ”κ°€
tjdakf Mar 5, 2026
5984dcf
test: λΈ”λž™μž­ 확인 ν…ŒμŠ€νŠΈ μΆ”κ°€
tjdakf Mar 5, 2026
86e65ea
feat: λΈ”λž™μž­ 확인 κΈ°λŠ₯ μΆ”κ°€
tjdakf Mar 5, 2026
87d0052
test: λΈ”λž™μž­ 확인 κΈ°λŠ₯ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μΆ”κ°€
tjdakf Mar 5, 2026
00142ff
feat: μ‚¬μš©μž μž…λ ₯에 λ”°λ₯Έ λΆ„κΈ°μ²˜λ¦¬ μΆ”κ°€
tjdakf Mar 5, 2026
7c6c131
test: λ”œλŸ¬κ°€ μΉ΄λ“œλ₯Ό 받을 수 μžˆλŠ”μ§€ 확인 ν…ŒμŠ€νŠΈ μΆ”κ°€
tjdakf Mar 5, 2026
f4ff0ab
feat: λ”œλŸ¬κ°€ μΉ΄λ“œλ₯Ό 받을 수 μžˆλŠ”μ§€ 확인 κΈ°λŠ₯ μΆ”κ°€
tjdakf Mar 5, 2026
034a4da
feat: λ”œλŸ¬ λ“œλ‘œμš° κΈ°λŠ₯ μΆ”κ°€
tjdakf Mar 5, 2026
e28165f
feat: μ΅œμ’… 승패 좜λ ₯ κΈ°λŠ₯ κ΅¬ν˜„
tjdakf Mar 5, 2026
50b2d81
feat: κ²Œμž„ μ΄ˆκΈ°ν™” 정보 μž…μΆœλ ₯ κΈ°λŠ₯ κ΅¬ν˜„
tjdakf Mar 5, 2026
681e322
feat: κ²Œμž„ κ²°κ³Ό 좜λ ₯ κΈ°λŠ₯ κ΅¬ν˜„
tjdakf Mar 5, 2026
c5be281
refactor: 컨트둀러 μž…μΆœλ ₯ 뢄리
tjdakf Mar 5, 2026
28b911a
refactor: InputView μƒμˆ˜ 처리 및 λ©”μ„œλ“œ 뢄리
tjdakf Mar 5, 2026
fb32a23
refactor: OutputView λ©”μ„œλ“œ κΈ°λŠ₯ 뢄리 및 μƒμˆ˜μ²˜λ¦¬
tjdakf Mar 5, 2026
959f02e
refactor: 맀직 λ„˜λ²„ μƒμˆ˜ 처리
tjdakf Mar 5, 2026
ef3b0a2
docs: Todo List Update
tjdakf Mar 5, 2026
0776dfb
refactor: 데이터 좜λ ₯ ν˜•μ‹ λ³€κ²½
tjdakf Mar 6, 2026
7b13d00
docs: README Update
tjdakf Mar 6, 2026
35ba56a
fix: λ”œλŸ¬ 승패 νŒμ • 였λ₯˜ μˆ˜μ •
tjdakf Mar 6, 2026
d29c5a0
refactor: 무늬 좜λ ₯ ν‘œμ‹œ μˆ˜μ •
tjdakf Mar 6, 2026
096c2d5
fix: λ²„μŠ€νŠΈ νŒμ • κΈ°λŠ₯ 였λ₯˜ μˆ˜μ •
tjdakf Mar 6, 2026
73d806b
fix: Ace, Face Card 이름이 κ°’μœΌλ‘œ 좜λ ₯λ˜λŠ” 문제 ν•΄κ²°
tjdakf Mar 6, 2026
468fecd
refactor: GameManager λ¦¬νŒ©ν„°λ§
tjdakf Mar 6, 2026
26555f9
refactor: νŒ¨ν‚€μ§€ 뢄리
tjdakf Mar 6, 2026
ad1fc70
fix: λ²„μŠ€νŠΈ κ²°κ³Ό 좜λ ₯ 였λ₯˜ μˆ˜μ •
tjdakf Mar 6, 2026
4cbbeb2
test: μ‹€ν—˜2 ace 1/11κ·œμΉ™ ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€
Seonwu-K Mar 2, 2026
b9026da
refactor: drawDealerCard λ°˜ν™˜ νƒ€μž… μˆ˜μ •
Seonwu-K Mar 7, 2026
a1246bf
refactor: μ»¨νŠΈλ‘€λŸ¬μ™€ λ„λ©”μΈλ“€μ˜ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ final μΆ”κ°€
Seonwu-K Mar 7, 2026
f4edc4a
refactor: μ‚¬μš©λ˜μ§€ μ•ŠλŠ” ν…ŒμŠ€νŠΈ 제거
Seonwu-K Mar 7, 2026
86cf9e3
refactor: rank κ°’ 비ꡐ 방식 μˆ˜μ •
Seonwu-K Mar 8, 2026
7ba0758
docs: to-do update
Seonwu-K Mar 9, 2026
1eabd39
refactor: ν”Œλ ˆμ΄μ–΄ ν•Έλ“œ ν•„λ“œ 일급 μ»¬λ ‰μ…˜μœΌλ‘œ 뢄리
Seonwu-K Mar 9, 2026
e6a31cc
refactor: GameManager의 Deck μ˜μ‘΄λ„ μˆ˜μ •
Seonwu-K Mar 9, 2026
ad668d0
test: λ―Έμ‚¬μš© ν…ŒμŠ€νŠΈ 제거
Seonwu-K Mar 9, 2026
146fa66
refactor: Calculator 제거, 점수 계산 둜직 Hand둜 이동
Seonwu-K Mar 9, 2026
7dfb950
refactor: bust νŒμ • μ±…μž„μ„ managerμ—μ„œ playerμ—κ²Œλ‘œ 이동
Seonwu-K Mar 9, 2026
4184dbc
comment: λ² νŒ… κΈ°λŠ₯ μΆ”κ°€ μ‹œ μˆ˜μ •μ΄ ν•„μš”ν•œ λΆ€λΆ„ 체크
Seonwu-K Mar 9, 2026
8833d8c
refactor: κ²Œμž„ ν„΄ μ§„ν–‰ 둜직 κ°œμ„  및 GameManager μ±…μž„ 정리
Seonwu-K Mar 10, 2026
2465c5a
refactor: κ²Œμž„ ν„΄ μ§„ν–‰ μ±…μž„ 정리 및 GameManager ν…ŒμŠ€νŠΈ 보완
Seonwu-K Mar 10, 2026
8784b70
Merge remote-tracking branch 'origin/seonwu-k' into seonwu-k
Seonwu-K Mar 10, 2026
d74f904
refactor: λΉ„μ–΄μžˆλŠ” 리슀트 μž…λ ₯ μ˜ˆμ™Έμ²˜λ¦¬ μΆ”κ°€ 및 λ”œλŸ¬ μ˜€ν”ˆ μΉ΄λ“œ λ©”μ„œλ“œ 체이닝 μˆ˜μ •
Seonwu-K Mar 10, 2026
34257ce
refactor: λΉ„μ–΄μžˆλŠ” 리슀트 μž…λ ₯ μ˜ˆμ™Έμ²˜λ¦¬ μΆ”κ°€ 및 λ”œλŸ¬ μ˜€ν”ˆ μΉ΄λ“œ λ©”μ„œλ“œ 체이닝 μˆ˜μ •
Seonwu-K Mar 10, 2026
3fd45c7
refactor: GameManager μ±…μž„ λΆ„λ°°(DTO 생성, 승패 νŒλ…) 및 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μΆ”κ°€
Seonwu-K Mar 10, 2026
8b70907
docs: README.md κ°±μ‹ 
Seonwu-K Mar 10, 2026
9f3c94b
refactor: domain νŒ¨ν‚€μ§€ λΆ„λ₯˜
Seonwu-K Mar 10, 2026
e077859
refactor: dto private final 적용
Seonwu-K Mar 11, 2026
8b3d822
refactor: λ―Έμ‚¬μš© μ„ μ–Έ 제거 및 final κ°€λŠ₯ν•œ λ³€μˆ˜μ— 적용
Seonwu-K Mar 11, 2026
1a35d1b
docs: update GitHub PR template
woowahan-neo Mar 5, 2026
b7e836b
docs: update GitHub PR template
woowahan-neo Mar 5, 2026
b0970d3
docs: update GitHub PR template
woowahan-neo Mar 5, 2026
f5f2773
docs: READMEλ‚΄μš© 정리 및 사이클2 λ² νŒ… κΈ°λŠ₯ λͺ©λ‘ μΆ”κ°€
Seonwu-K Mar 12, 2026
75a46d8
feat: λ² νŒ… κΈˆμ•‘ 도메인 μΆ”κ°€ 및 Result κ·œμΉ™ μΆ”κ°€
Seonwu-K Mar 12, 2026
9a53db7
feat: 처음 λΈ”λž™μž­μ„ λ„μš΄ ν”Œλ ˆμ΄μ–΄λ₯Ό κ΅¬λΆ„ν•˜λŠ” 둜직 μΆ”κ°€
Seonwu-K Mar 12, 2026
a938c68
Merge branch step2
Seonwu-K Mar 12, 2026
ffcd4dd
feat: Player, Dealer 좔상화 Participant μΆ”κ°€
Seonwu-K Mar 12, 2026
80cca09
refactor: PlayerStatus result ν•„λ“œλ₯Ό naturalBlackJack boolean으둜 μˆ˜μ •
Seonwu-K Mar 12, 2026
ade62ac
docs: README μ—…λ°μ΄νŠΈ
Seonwu-K Mar 12, 2026
8901f90
feat: 승,무,패,λ²„μŠ€νŠΈ 결과에 λ”°λ₯Έ νŒμ •κ³Ό κΈˆμ•‘ 계산 좜λ ₯ κ΅¬ν˜„
Seonwu-K Mar 12, 2026
5f1ee76
feat: λ² νŒ… κΈˆμ•‘ μž…λ ₯κ³Ό μ΅œμ’… 수읡 μ •μ‚° κ΅¬ν˜„
Seonwu-K Mar 12, 2026
e70b9c5
refactor: λ―Έμ‚¬μš© λ©”μ„œλ“œ 제거
Seonwu-K Mar 13, 2026
a9512d1
refactor: λ―Έμ‚¬μš© λ©”μ„œλ“œ 제거 및 final μ„€μ •
Seonwu-K Mar 13, 2026
cce6a31
refactor: enum, dto λ―Έμ‚¬μš© λ©”μ„œλ“œ 및 ν…ŒμŠ€νŠΈμš© handSize 제거
Seonwu-K Mar 14, 2026
2390999
fix: λ™μΌν•œ μΉ΄λ“œκ°€ ν”Œλ ˆμ΄μ–΄μ—κ²Œ λ“œλ‘œμš°λ˜λŠ” 문제 ν•΄κ²°
Seonwu-K Mar 14, 2026
b08ead3
refactor: Players의 add λ©”μ„œλ“œ 제거 및 등둝 방식 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œλ‘œ λ³€κ²½
Seonwu-K Mar 14, 2026
b6b65a6
refactor: 이름 μŠ€ν”Œλ¦Ώ λ©”μ„œλ“œ λΆˆλ³€ 리슀트둜 μˆ˜μ •
Seonwu-K Mar 14, 2026
0c16c99
refactor: dto νŒ¨ν‚€μ§€ 이동 및 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘λ™ν•˜λ„λ‘ μˆ˜μ •
Seonwu-K Mar 15, 2026
ffce44c
refactor: 승패 νŒμ • λΆ„κΈ° Result둜 이동, 수읡 계산 둜직 μƒˆλ‘œμš΄ 객체둜 뢄리
Seonwu-K Mar 15, 2026
0bc8aee
refactor: dto μœ„μΉ˜ λ³€κ²½ 및 κΈ°λŠ₯ μˆ˜μ •μ— μ˜ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ μˆ˜μ •
Seonwu-K Mar 15, 2026
d3d2443
refactor: updateNaturalBlackJack μ±…μž„μ„ Player둜 이동
Seonwu-K Mar 15, 2026
8f67685
docs: README.md μ—…λ°μ΄νŠΈ
Seonwu-K Mar 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,6 @@
- [ ] λ―Έμ…˜μ˜ ν•„μˆ˜ μš”κ΅¬μ‚¬ν•­μ„ λͺ¨λ‘ κ΅¬ν˜„ν–ˆλ‚˜μš”?
- [ ] Gradle `test`λ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ, λͺ¨λ“  ν…ŒμŠ€νŠΈκ°€ μ •μƒμ μœΌλ‘œ ν†΅κ³Όν–ˆλ‚˜μš”?
- [ ] μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜λ‚˜μš”?
- [ ] [ν”„λ‘€λ‘œκ·Έ](https://prolog.techcourse.co.kr)에 μ…€ν”„ 체크λ₯Ό μž‘μ„±ν–ˆλ‚˜μš”?
- <!-- μž‘μ„±ν•œ μ…€ν”„ 체크의 링크λ₯Ό λ‚¨κ²¨μ£Όμ„Έμš”. -->


## 객체지ν–₯ μƒν™œμ²΄μ‘° μš”κ΅¬μ‚¬ν•­μ„ μ–Όλ§ˆλ‚˜ 잘 μΆ©μ‘±ν–ˆλ‹€κ³  μƒκ°ν•˜μ‹œλ‚˜μš”?

### 1~5점 μ€‘μ—μ„œ μ„ νƒν•΄μ£Όμ„Έμš”.

- [ ] 1 (μ „ν˜€ μΆ©μ‘±ν•˜μ§€ λͺ»ν•¨)
- [ ] 2
- [ ] 3 (보톡)
- [ ] 4
- [ ] 5 (μ™„λ²½ν•˜κ²Œ μΆ©μ‘±)

### μ„ νƒν•œ 점수의 이유λ₯Ό μ μ–΄μ£Όμ„Έμš”.

<!-- 이유 μž‘μ„± -->


## μ–΄λ–€ 뢀뢄에 μ§‘μ€‘ν•˜μ—¬ 리뷰해야 ν• κΉŒμš”?

Choose a reason for hiding this comment

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

섀계 결정을 내릴 λ•Œμ˜ 기쀀에 λŒ€ν•œ κ³ λ―Ό
도메인 섀계λ₯Ό ν•  λ•Œ
μ—¬λŸ¬ 섀계 선택지 쀑 ν•˜λ‚˜λ₯Ό κ²°μ •ν•  λ•Œ μ–΄λ–€ κΈ°μ€€μœΌλ‘œ νŒλ‹¨ν•˜μ‹œλŠ”μ§€
κ²½ν—˜μ΄ λΆ€μ‘±ν•œ 초보 κ°œλ°œμžκ°€ 섀계 결정을 ν•  λ•Œ μ€‘μš”ν•˜κ²Œ μž‘μ•„μ•Ό ν•  기쀀이 무엇인지
에 λŒ€ν•΄ 쑰언을 λ“£κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

일단 확신이 μ„œμ§€ μ•ŠλŠ”λ‹€λΌκ³  말씀해 μ£Όμ…¨λŠ”λ° λ„ˆλ¬΄ μ‘°κΈ‰ν•΄ν•˜μ‹€ ν•„μš”λŠ” 없을 것 κ°™μ•„μš”!
μ§€κΈˆ 말씀해주신 κ³ λ―Ό μžμ²΄κ°€ λ°”λ‘œ κ·Έ 기쀀을 λ§Œλ“€μ–΄κ°€λŠ” 과정이라고 μƒκ°ν•΄μš” :)

섀계λ₯Ό ν•˜λ‹€ 보면 사싀 정닡이 μžˆλŠ” κ²½μš°λŠ” λ§Žμ§€ μ•Šμ€ 것 κ°™μ•„μš”~ 같은 λ¬Έμ œλΌλ„ κ°œλ°œμžλ§ˆλ‹€ λ‹€λ₯Έ ꡬ쑰λ₯Ό μ„ νƒν•˜κΈ°λ„ ν•˜κ³ , 상황에 따라 더 μ μ ˆν•œ 섀계가 달라지기도 ν•˜λ‹ˆκΉŒμš”!
κ·Έλž˜μ„œ μ €λŠ” 섀계 결정을 ν•  λ•Œ 항상 κ³ λ €ν•˜λŠ” 뢀뢄은 μ•„λž˜ μ„Έ κ°€μ§€μΈλ°μš”.

  1. μ½”λ“œκ°€ μš”κ΅¬μ‚¬ν•­λŒ€λ‘œ λ™μž‘ν•˜λŠ”κ°€
  2. λ‹€λ₯Έ μ‚¬λžŒμ΄ μ½μ—ˆμ„ λ•Œ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄κ°€
  3. 이후에 변경이 생겼을 λ•Œ μˆ˜μ •ν•˜κΈ° μ‰¬μš΄ ꡬ쑰인가

μ—¬λŸ¬ 섀계 선택지가 μžˆμ„ λ•ŒλŠ” κ²°κ΅­ 이 μ„Έ κ°€μ§€ κΈ°μ€€μ—μ„œ μ–΄λŠ μͺ½μ΄ 더 λ‚˜μ€μ§€ 생각해보고 κ²°μ •ν•˜λŠ” νŽΈμž…λ‹ˆλ‹€!

또 초보 κ°œλ°œμžκ°€ 섀계 결정을 ν•  λ•Œ κ°€μž₯ μ€‘μš”ν•˜κ²Œ κ°€μ Έκ°€λ©΄ 쒋은 기쀀은 단일 μ±…μž„ 원칙(SRP)이라고 μƒκ°ν•©λ‹ˆλ‹€.
객체가 λ„ˆλ¬΄ λ§Žμ€ 일을 ν•˜κ³  μžˆμ§€λŠ” μ•Šμ€μ§€, ν•˜λ‚˜μ˜ 객체가 ν•˜λ‚˜μ˜ μ±…μž„μ— μ§‘μ€‘ν•˜κ³  μžˆλŠ”μ§€λ₯Ό 계속 μ˜μ‹¬ν•΄λ³΄λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ 섀계가 κ½€ 많이 μ •λ¦¬λ˜λŠ” κ²½ν—˜μ„ ν•˜κ²Œ λ˜λŠ” 것 κ°™μ•„μš”~

Copy link
Author

Choose a reason for hiding this comment

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

말씀해주신 기쀀듀이 많이 도움이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

혼자 섀계 ν•  λ•Œ λͺ…ν™•ν•œ 정닡이 μ—†λŠ” λ¬Έμ œλ‹€ λ³΄λ‹ˆ 닡닡함을 λŠλ‚„ λ•Œκ°€ λ§Žμ•˜λŠ”λ°,
정리해주신 κ²ƒμ²˜λŸΌ

  1. μš”κ΅¬μ‚¬ν•­λŒ€λ‘œ 잘 λ™μž‘ν•˜λŠ”μ§€
  2. λ‹€λ₯Έ μ‚¬λžŒμ΄ 읽고 μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ ꡬ쑰인지
  3. 이후 변경이 생겼을 λ•Œ μˆ˜μ •ν•˜κΈ° μ‰¬μš΄μ§€

이 μ„Έ κ°€μ§€ κΈ°μ€€μœΌλ‘œ λΉ„κ΅ν•΄λ³΄λŠ” 방식이 νŒλ‹¨ν•  λ•Œ 쒋은 기쀀이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

이번 λ―Έμ…˜μ—μ„œλŠ” κΈ°λŠ₯ κ΅¬ν˜„μ— μ§‘μ€‘ν•˜λ‹€ λ³΄λ‹ˆ 섀계 결정을 내릴 λ•Œ 이런 기쀀을 μΆ©λΆ„νžˆ μ μš©ν•˜μ§€ λͺ»ν–ˆλ˜ 것 κ°™μ•„ 아쉬움이 λ‚¨μŠ΅λ‹ˆλ‹€.

μ•žμœΌλ‘œλŠ” 섀계 선택지가 μ—¬λŸ¬ 개 μžˆμ„ λ•Œ 말씀해주신 기쀀듀을 κ°€μ§€κ³ 
쑰금 더 μ˜μ‹μ μœΌλ‘œ λΉ„κ΅ν•΄λ³΄λŠ” μ—°μŠ΅μ„ ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 쒋은 μ‘°μ–Έ κ°μ‚¬ν•©λ‹ˆλ‹€!


Expand Down
332 changes: 284 additions & 48 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,66 +2,302 @@

λΈ”λž™μž­ λ―Έμ…˜ μ €μž₯μ†Œ

## κ΅¬ν˜„ν•  κΈ°λŠ₯ λͺ©λ‘
---

# 사이클1 κ΅¬ν˜„ κΈ°λŠ₯

## 1. μΉ΄λ“œ 덱 생성 및 μ…”ν”Œ

### μΉ΄λ“œ 덱 생성 + μ…”ν”Œ
- [x] 52μž₯의 μΉ΄λ“œλ₯Ό μƒμ„±ν•œλ‹€.
- [x] μΉ΄λ“œλŠ” λ¬΄λŠ¬λ³„ 숫자순으둜 μƒμ„±λœλ‹€.
- [x] μΉ΄λ“œλ₯Ό μ…”ν”Œν•œλ‹€.
- [x] μΉ΄λ“œλŠ” λ¬΄λŠ¬λ³„ 숫자 μˆœμ„œλ‘œ μƒμ„±ν•œλ‹€.
- [x] μƒμ„±λœ μΉ΄λ“œλ₯Ό μ…”ν”Œν•œλ‹€.

### ν”Œλ ˆμ΄μ–΄/λ”œλŸ¬ 관리
- [x] ν”Œλ ˆμ΄μ–΄λ₯Ό ν”Œλ ˆμ΄μ–΄ λͺ©λ‘μ— λ“±λ‘ν•œλ‹€.
- [x] λ”œλŸ¬λ₯Ό λ§Œλ“ λ‹€.
- [x] μΉ΄λ“œλ₯Ό λŒλ¦°λ‹€.
---

### μΉ΄λ“œ 점수 계산
- [x] J,Q,KλŠ” 10으둜 μ²˜λ¦¬ν•œλ‹€.
- [x] AceλŠ” 1점으둜 μ²˜λ¦¬ν•œλ‹€.
## 2. ν”Œλ ˆμ΄μ–΄ 및 λ”œλŸ¬ 관리

- [x] ν”Œλ ˆμ΄μ–΄λ₯Ό μƒμ„±ν•œλ‹€.
- [x] ν”Œλ ˆμ΄μ–΄ λͺ©λ‘μ— λ“±λ‘ν•œλ‹€.
- [x] λ”œλŸ¬λ₯Ό μƒμ„±ν•œλ‹€.
- [x] ν”Œλ ˆμ΄μ–΄μ™€ λ”œλŸ¬μ—κ²Œ μΉ΄λ“œλ₯Ό λΆ„λ°°ν•œλ‹€.

---

## 3. μΉ΄λ“œ 점수 계산

- [x] μΉ΄λ“œ 숫자λ₯Ό κΈ°λ³Έ 점수둜 μ‚¬μš©ν•œλ‹€.
- [x] Jack, Queen, King은 10점으둜 μ²˜λ¦¬ν•œλ‹€.
- [x] AceλŠ” 기본적으둜 1점으둜 μ²˜λ¦¬ν•œλ‹€.
- [x] μΉ΄λ“œ 점수λ₯Ό ν•©μ‚°ν•œλ‹€.

### Ace 1/11 처리
- [x] ν˜„μž¬ ν•©μ‚° μ μˆ˜μ— 10점의 μ—¬μœ κ°€ 있으면 10점을 λ”ν•œλ‹€.
---

## 4. Ace 점수 처리 (1 / 11)

- [x] ν˜„μž¬ μ μˆ˜μ—μ„œ 10점을 좔가해도 21을 λ„˜μ§€ μ•ŠλŠ” 경우 Aceλ₯Ό 11둜 κ³„μ‚°ν•œλ‹€.

---

## 5. λ²„μŠ€νŠΈ νŒμ •

### λ²„μŠ€νŠΈ νŒμ •
- [x] 21점이 λ„˜μœΌλ©΄ λ²„μŠ€νŠΈ
- [x] μΉ΄λ“œ 합이 21을 μ΄ˆκ³Όν•˜λ©΄ λ²„μŠ€νŠΈλ‘œ νŒμ •ν•œλ‹€.

---

### 히트/μŠ€νƒ λ“œ μž…λ ₯
- [x] λ²„μŠ€νŠΈκ°€ μ•„λ‹ˆλ©΄ 히트/μŠ€νƒ λ“œλ₯Ό μž…λ ₯λ°›λŠ”λ‹€.
- [x] 히트면 μΉ΄λ“œλ₯Ό ν•œ μž₯ 더 λ°›λŠ”λ‹€.
- [x] μŠ€νƒ λ“œλ©΄ 턴을 μ’…λ£Œν•œλ‹€.
## 6. 히트 / μŠ€νƒ λ“œ μ§„ν–‰

- [x] λ²„μŠ€νŠΈκ°€ μ•„λ‹Œ 경우 히트/μŠ€νƒ λ“œ μž…λ ₯을 λ°›λŠ”λ‹€.
- [x] 히트λ₯Ό μ„ νƒν•˜λ©΄ μΉ΄λ“œλ₯Ό ν•œ μž₯ 더 λ°›λŠ”λ‹€.
- [x] μŠ€νƒ λ“œλ₯Ό μ„ νƒν•˜λ©΄ ν•΄λ‹Ή ν”Œλ ˆμ΄μ–΄μ˜ 턴을 μ’…λ£Œν•œλ‹€.

---

### 승패 νŒμ •
- [x] λ”œλŸ¬μ™€ 점수λ₯Ό λΉ„κ΅ν•œλ‹€.
- [x] κ²°κ³Όλ₯Ό μƒμ„±ν•œλ‹€.
## 7. 승패 νŒμ •

### κ²°κ³Ό 좜λ ₯
- [x] λ”œλŸ¬μ™€ ν”Œλ ˆμ΄μ–΄μ˜ 점수λ₯Ό λΉ„κ΅ν•œλ‹€.
- [x] κ²Œμž„ κ²°κ³Ό(승/무/패)λ₯Ό μƒμ„±ν•œλ‹€.

---

### TO-DO
- [x] Enum 좜λ ₯κ°’ λ³€κ²½
- [x] 승패 좜λ ₯κ°’ λ³€κ²½
- [x] domain.card.Suit 좜λ ₯κ°’ λ³€κ²½
## 8. κ²°κ³Ό 좜λ ₯

- [x] ν”Œλ ˆμ΄μ–΄ 및 λ”œλŸ¬μ˜ μΉ΄λ“œμ™€ 점수λ₯Ό 좜λ ₯ν•œλ‹€.
- [x] κ²Œμž„ κ²°κ³Όλ₯Ό 좜λ ₯ν•œλ‹€.

---

# 사이클1 λ¦¬νŒ©ν„°λ§ 및 κ°œμ„  μž‘μ—…

## 좜λ ₯ 및 ν‘œν˜„ κ°œμ„ 

- [x] Enum 좜λ ₯κ°’ μˆ˜μ •
- [x] 승패 κ²°κ³Ό 좜λ ₯κ°’ λ³€κ²½
- [x] `domain.card.Suit` 좜λ ₯κ°’ λ³€κ²½
- [x] Ace, Jack, Queen, King이 숫자 κ°’μœΌλ‘œ 좜λ ₯λ˜λŠ” 문제 μˆ˜μ •

---

## κ²Œμž„ 둜직 μˆ˜μ •

- [x] λ”œλŸ¬ 승패 νŒμ • 였λ₯˜ μˆ˜μ •
- [x] λ²„μŠ€νŠΈμΈλ° hit/stand 질문
- [x] Ace, Jack, Queen, King 이름이 κ°’(1,10)으둜 좜λ ₯λ˜λŠ” 문제
- [x] domain.game.GameManager λ¦¬νŒ©ν„°λ§
- [x] νŒ¨ν‚€μ§€ 정리
- [x] drawDealerCard() λ©”μ„œλ“œμ˜ 응닡값 λ―Έμ‚¬μš©
- [x] GameManager의 μ±…μž„ μž¬λΆ„λ°°
- [x] Deck μ΄ˆκΈ°ν™”, μ…”ν”Œ μ±…μž„ 제거
- [x] DTO 생성 μ±…μž„ 뢄리
- [x] 승패 νŒμ • μ±…μž„ 뢄리
- [x] GameController ꡬ쑰 μˆ˜μ •
- [x] λ””λ―Έν„°μ˜ 법칙
- [x] 슀트림 체이닝은 μ€„λ°”κΏˆν•΄μ„œ μž‘μ„±
- [x] 체이닝 λ©”μ„œλ“œ μ•ˆμƒκΈ°λ„λ‘ ꡬ쑰 μˆ˜μ •
- [x] rank 1 λ³΄λ‹€λŠ” μ˜λ―ΈμžˆλŠ” κ°’ (`ACE`)κ°€ μ΄ν•΄ν•˜κΈ° 쉽닀
- [x] 주석이 정말 ν•„μš”ν•œμ§€, μ΄λ¦„μ΄λ‚˜ ꡬ쑰둜 μΆ©λΆ„ν•˜μ§€ μ•Šμ€μ§€
- [x] primitive νƒ€μž… wrapper둜 감싸기
- [x] 일급 μ»¬λ ‰μ…˜ -> Hand둜 μˆ˜μ •
- [x] ν•Έλ“œ κΈ°λŠ₯ μΆ”κ°€(μŠ€μ½”μ–΄ 계산, μƒνƒœκ°’ νŒλ‹¨, ACE 계산 둜직) 및 κΈ°μ‘΄ Calculator 제거
- [x] mutable이어야 ν•  μ΄μœ κ°€ μ—†λ‹€λ©΄, λ°˜λ“œμ‹œ final을 뢙일 것
- [x] ν”Œλ ˆμ΄μ–΄κ°€ μž…λ ₯λ˜μ§€ μ•ŠλŠ” κ²½μš°μ— λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬
- [x] κ·œμΉ™ 적용
- [x] λ²„μŠ€νŠΈ μƒνƒœμ—μ„œλ„ hit/stand 질문이 λ‚˜μ˜€λŠ” 문제 μˆ˜μ •

---

## ꡬ쑰 λ¦¬νŒ©ν„°λ§

- [x] `GameManager` λ¦¬νŒ©ν„°λ§
- [x] `GameController` ꡬ쑰 μˆ˜μ •
- [x] νŒ¨ν‚€μ§€ ꡬ쑰 정리

### GameManager μ±…μž„ μž¬λΆ„λ°°

- [x] Deck μ΄ˆκΈ°ν™” 및 μ…”ν”Œ μ±…μž„ 제거
- [x] DTO 생성 μ±…μž„ 뢄리
- [x] 승패 νŒμ • μ±…μž„ 뢄리

---

## μ½”λ“œ μŠ€νƒ€μΌ 및 섀계 κ°œμ„ 

- [x] λ””λ―Έν„°μ˜ 법칙 적용
- [x] 슀트림 체이닝 μ‹œ μ€„λ°”κΏˆ 적용
- [x] κ³Όλ„ν•œ 체이닝 λ©”μ„œλ“œ 제거
- [x] 의미 μžˆλŠ” μƒμˆ˜ μ‚¬μš© (`1` β†’ `ACE`)
- [x] λΆˆν•„μš”ν•œ 주석 제거 (이름/ꡬ쑰둜 ν‘œν˜„)
- [x] primitive νƒ€μž…μ„ wrapper 객체둜 감싸기
- [x] mutable일 ν•„μš”κ°€ μ—†λŠ” 경우 `final` μ‚¬μš©

---

## 도메인 ꡬ쑰 κ°œμ„ 

- [x] 일급 μ»¬λ ‰μ…˜ 적용 β†’ `Hand`
- [x] `Hand`에 κΈ°λŠ₯ 톡합
- [x] μŠ€μ½”μ–΄ 계산
- [x] μƒνƒœ νŒλ‹¨
- [x] Ace 계산 둜직
- [x] 기쑴 `Calculator` 제거

---

## μ˜ˆμ™Έ 처리 및 ν…ŒμŠ€νŠΈ

- [x] ν”Œλ ˆμ΄μ–΄ μž…λ ₯이 μ—†λŠ” 경우 μ˜ˆμ™Έ 처리
- [x] κ²Œμž„ κ·œμΉ™ 검증 둜직 μΆ”κ°€
- [x] ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μΆ”κ°€


---

# 사이클2 κΈ°λŠ₯ κ΅¬ν˜„

Choose a reason for hiding this comment

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

이번 사이클에 λ―Έμ…˜ 쀑 기둝이 μžˆμ—ˆλ˜κ±° 같은데 READMEλ‚˜ PRμ—λŠ” λ”°λ‘œ μ•ˆμ μ–΄μ£Όμ‹œλ‚˜μš”?!

κΈ°λŠ₯ μΆ”κ°€λ‘œ 인해 μˆ˜μ •ν•œ μœ„μΉ˜ 개수
사이클1 λ•Œλ³΄λ‹€ μˆ˜μ • λ²”μœ„κ°€ μ€„μ—ˆλŠ”κ°€/λŠ˜μ—ˆλŠ”κ°€
κ·œμΉ™ 적용으둜 λ³€κ²½ν•œ μ½”λ“œ 1κ³³
ν…ŒμŠ€νŠΈκ°€ 섀계λ₯Ό λ„μš΄ μˆœκ°„ 1회

Copy link
Author

Choose a reason for hiding this comment

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

기둝을 ν•΄λ‘μ—ˆλŠ”λ° PRμ—μ„œ 질문 거리λ₯Ό κ³ λ―Όν•˜λ‹€κ°€ μ λŠ” 것을 λ†“μ³€μŠ΅λ‹ˆλ‹€ πŸ₯²
README에 μ—…λ°μ΄νŠΈν•˜μ—¬ μ»€λ°‹ν•΄λ‘κ² μŠ΅λ‹ˆλ‹€..!


## 1. λ°°νŒ… κΈˆμ•‘ 관리
- [X] λ°°νŒ… κΈˆμ•‘μ„ κ΄€λ¦¬ν•˜λŠ” 도메인을 κ΅¬ν˜„ν•œλ‹€.
- [X] 처음 받은 λ°°νŒ… κΈˆμ•‘μ„ μ €μž₯
- [X] μž…λ ₯ 받은 μ •μ‚° μ‹œ κ²°κ³Ό μƒνƒœ(승/무/패/λΈ”λž™μž­/λ²„μŠ€νŠΈ)에 따라 κ³„μ‚°ν•œ 총 μˆ˜μ΅μ„ 리턴
- [X] λ”œλŸ¬λ₯Ό ν”Œλ ˆμ΄μ–΄μ˜ 상속을 λ°›μ§€ μ•Šκ³ , λ”œλŸ¬μ™€ ν”Œλ ˆμ΄μ–΄ λͺ¨λ‘ 좔상화 μ‹œν‚€λŠ” Participants 생성
## 2. νŒμ • μΆ”κ°€
- [X] κΈ°μ‘΄ `Result`에 λΈ”λž™μž­κ³Ό λ²„μŠ€νŠΈλ₯Ό μΆ”κ°€
- [X] 처음 BlackJack이 뜬 경우 λΈ”λž™μž­ μƒνƒœλ‘œ 결과에 μ €μž₯
- κΈ°μ‘΄μ—λŠ” μƒνƒœκ°’μ„ μ €μž₯해두지 μ•Šκ³  λ§ˆμ§€λ§‰μ— ν•Έλ“œ 결과둜 μ΅œμ’… Dto 리슀트λ₯Ό λ§Œλ“€μ–΄ μŠΉνŒ¨νŒμ •μ„ ν•˜μ˜€μœΌλ‚˜, μˆ˜μ •λœ μƒν™©μ—μ„œ λΈ”λž™μž­μ„ 미리 μ²΄ν¬ν•˜κ³  히트/μŠ€νƒ λ“œ 및 승패 νŒμ •μ—μ„œ μ œμ™Έν•΄μ•Ό ν•˜λ―€λ‘œ μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€
- [X] λ² νŒ…κΈˆμ•‘κ³Ό κ²°κ³Όλ₯Ό ν•¨κ»˜ μ €μž₯ν•˜λ„λ‘ μˆ˜μ •
- [X] 초기 μΉ΄λ“œ λ“œλ‘œμš°κ°€ λλ‚œ 직후 λΈ”λž™μž­μΈ μœ μ €λ₯Ό μ°Ύμ•„μ„œ κ²°κ³Ό ν•„λ“œ κ°±μ‹ 
- [X] 결과에 λ”°λ₯Έ λ°°λ‹Ή μˆ˜μ΅μ„ μƒνƒœ κ°’μœΌλ‘œ 가지도둝
- λ¬΄μŠΉλΆ€λŠ” μ›κΈˆ 리턴 -> *1
- μŠΉμ€ μ›κΈˆ + 수읡 -> * 2
- 패, λ²„μŠ€νŠΈλŠ” μ›κΈˆ 손싀 -> * -1
- μ²˜μŒλΆ€ν„° λΈ”λž™μž­μΈ 경우 λ°°νŒ…μ˜ 1.5λ°° 수읡 -> * 2.5
- [X] ν”Œλ ˆμ΄μ–΄ Hit/Stand λ‹¨κ³„μ—μ„œ BlackJack이 μ•„λ‹Œ μœ μ €λ§Œ ν•„ν„°λ§ν•˜μ—¬ λ¬Έλ‹΅ μ§„ν–‰
- [X] λ”œλŸ¬ μΆ”κ°€ λ“œλ‘œμš° λ‹¨κ³„μ—μ„œ Bustκ°€ 되면 μ¦‰μ‹œ μ΅œμ’… κ²°κ³Ό 생성 λ‹¨κ³„λ‘œ 이동
- [X] 각 ν”Œλ ˆμ΄μ–΄μ— λŒ€ν•΄ μ΅œμ’… Resultλ₯Ό 계산
- [X] ν”Œλ ˆμ΄μ–΄κ°€ bustλ©΄ BUST
- [X] bustκ°€ μ•„λ‹ˆλ©΄ λ”œλŸ¬μ™€ 점수 비ꡐ ν›„ WIN, LOSE, DRAW νŒμ •
- [X] natural blackjack인 경우 λΈ”λž™μž­ λ°°λ‹Ή κ·œμΉ™μ„ λ°˜μ˜ν•  수 μžˆλ„λ‘ 별도 처리
- [X] κ³„μ‚°λœ Result λ°”νƒ•μœΌλ‘œ μ •μ‚° κΈˆμ•‘ 계산
- [X] Result와 μ •μ‚° κΈˆμ•‘μ„ ν¬ν•¨ν•œ DTO 생성

## 3. λ°°νŒ… κΈˆμ•‘ μž…λ ₯ν•˜μ—¬ ν”Œλ ˆμ΄μ–΄ 생성
- [X] ν”Œλ ˆμ΄μ–΄ 이름 μž…λ ₯ ν›„ λ°°νŒ… κΈˆμ•‘λ„ μž…λ ₯
- [X] ν”Œλ ˆμ΄μ–΄μ™€ κΈˆμ•‘μ„ λ§€ν•‘ν•΄μ„œ ν”Œλ ˆμ΄μ–΄ 생성
- [X] ν”Œλ ˆμ΄μ–΄μ˜ λ°°νŒ… κΈˆμ•‘μ„ λ‹€λ£¨λŠ” λ©”μ„œλ“œ κ΅¬ν˜„

## 4. λ² νŒ… κ²°κ³Ό νŒμ • 및 좜λ ₯
- [X] κΈ°μ‘΄ λ”œλŸ¬μ˜ 승,무,패 좜λ ₯ κΈ°λŠ₯ 제거
- [X] ν”Œλ ˆμ΄μ–΄λ“€μ˜ 승, 무, 패(λ²„μŠ€νŠΈ), λΈ”λž™μž­ κΈ°μ€€μœΌλ‘œ 값을 κ³„μ‚°ν•˜μ—¬ μˆ˜μ΅μ„ 좜λ ₯ν•˜λ„λ‘ μˆ˜μ •
- [X] λ”œλŸ¬ κΈ°μ€€ 총 수읡 계산 λ°›μ•„μ„œ 좜λ ₯ν•˜λŠ” κΈ°λŠ₯ κ΅¬ν˜„


## κ³ λ―Ό
- Playersλ₯Ό copyOf둜 해도 얕은 볡사라 Player μžμ²΄μ—λŠ” 접근이 κ°€λŠ₯ν•΄μ§„λ‹€. Player 자체의 변동 κ°€λŠ₯성은?


---

## PR 리뷰 ν›„ μΆ”κ°€ μˆ˜μ • 사항
- [X] μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” Result enum ν•„λ“œ 제거
- [X] DTO의 intialHandSize 제거
- [X] λ™μΌν•œ μΉ΄λ“œκ°€ ν”Œλ ˆμ΄μ–΄μ—κ²Œ λ“œλ‘œμš°λ˜λŠ” 문제 ν•΄κ²°
- [X] Players μΈμŠ€ν„΄μŠ€ 생성 및 μΆ”κ°€ 방식 μˆ˜μ •
- [X] splitPlayerNameInput 슀트림 λΆˆλ³€ 리슀트둜 μˆ˜μ •(toList)
- [X] ν…ŒμŠ€νŠΈμ—μ„œλ§Œ μ“°μ΄λŠ” handSize λ©”μ„œλ“œ 제거
- [X] GameResultJudge의 κ²°κ³Ό λΆ„κΈ° μ±…μž„μ„ enumμ—κ²Œ λ„˜κΈ°κΈ°
~~- [ ] μ»¨νŠΈλ‘€λŸ¬κ°€ λ§€λ‹ˆμ €λ₯Ό μƒνƒœλ‘œ λ“€κ³ μžˆλŠ” ꡬ쑰 κ°œμ„ ~~
- [X] Result와 λ°°λ‹Ή 수읡금 λΉ„μœ¨ 뢄리
- [X] PlayerStatusμ—μ„œ 수읡 계산 ν•˜λŠ” λΆ€λΆ„ λΆ„λ¦¬ν•˜κΈ°
- [X] 기둝 λ‚΄μš© README.md μΆ”κ°€
- [X] updateNaturalBlackJack μƒνƒœ μ—…λ°μ΄νŠΈκ°€ λ°–μ—μ„œ ν˜ΈμΆœλ˜λŠ” 문제 μˆ˜μ •




## πŸ“ λ―Έμ…˜ 기둝

### κΈ°λŠ₯ μΆ”κ°€λ‘œ 인해 μˆ˜μ •ν•œ μœ„μΉ˜

이번 λ―Έμ…˜μ—μ„œλŠ” **λ² νŒ… κΈ°λŠ₯을 μΆ”κ°€ν•œλ‹€κ³  κ°€μ •ν•˜κ³  λ³€κ²½ λ²”μœ„λ₯Ό 뢄석**ν•˜μ˜€λ‹€.

λ² νŒ… κΈ°λŠ₯은 λ‹¨μˆœν•œ λ‚΄λΆ€ 둜직이 μ•„λ‹ˆλΌ
**μž…λ ₯ β†’ μƒνƒœ μ €μž₯ β†’ κ²Œμž„ μ§„ν–‰ β†’ κ²°κ³Ό 계산 β†’ 좜λ ₯** 전체 흐름에 영ν–₯을 μ£ΌλŠ” κΈ°λŠ₯μ΄μ—ˆλ‹€.

κ·Έ κ²°κ³Ό λ‹€μŒ μœ„μΉ˜μ—μ„œ μˆ˜μ •μ΄ ν•„μš”ν•˜λ‹€κ³  νŒλ‹¨ν•˜μ˜€λ‹€.

| μˆ˜μ • μœ„μΉ˜ | 이유 |
|---|---|
| Player | ν”Œλ ˆμ΄μ–΄κ°€ λ² νŒ… κΈˆμ•‘μ„ μƒνƒœλ‘œ κ°€μ Έμ•Ό ν•œλ‹€ |
| Players | ν”Œλ ˆμ΄μ–΄ μ§‘ν•©μ—μ„œ λ² νŒ… 정보와 κ²°κ³Ό 집계가 ν•„μš” |
| GameManager | κ²Œμž„ κ²°κ³Ό 계산 μ‹œ λ² νŒ… μ •μ‚° 둜직 μΆ”κ°€ |
| GameController | κ²Œμž„ μ‹œμž‘ 전에 λ² νŒ… κΈˆμ•‘ μž…λ ₯ ν•„μš” |
| InputView | ν”Œλ ˆμ΄μ–΄λ³„ λ² νŒ… κΈˆμ•‘ μž…λ ₯ |
| OutputView | λ² νŒ… κ²°κ³Ό 및 수읡 좜λ ₯ |
| GameFinalResultDto | κ²°κ³Ό DTO에 수읡 정보 μΆ”κ°€ |
| Result | μŠΉνŒ¨μ— λ”°λ₯Έ μ •μ‚° κΈ°μ€€ μΆ”κ°€ |

**총 μˆ˜μ • μœ„μΉ˜: 8개**

이λ₯Ό 톡해 **ν•˜λ‚˜μ˜ κΈ°λŠ₯이 μ—¬λŸ¬ 계측을 따라 μ΄λ™ν•˜λ©΄ μˆ˜μ • λ²”μœ„κ°€ λ„“μ–΄μ§„λ‹€**λŠ” 것을 ν™•μΈν–ˆλ‹€.

---

### 사이클 1 λŒ€λΉ„ μˆ˜μ • λ²”μœ„

사이클1μ—μ„œλŠ” κ²Œμž„ 둜직 λŒ€λΆ€λΆ„μ΄ `GameManager`에 μ§‘μ€‘λ˜μ–΄ μžˆμ—ˆλ‹€.

```
GameManager
β”œ μΉ΄λ“œ λΆ„λ°°
β”œ 점수 계산
β”œ κ²Œμž„ μ§„ν–‰
β”” 승패 계산
```

이 κ΅¬μ‘°μ—μ„œλŠ” κΈ°λŠ₯이 좔가될 λ•Œ **GameManager에 μˆ˜μ •μ΄ μ§‘μ€‘λ˜λŠ” 문제**κ°€ μžˆμ—ˆλ‹€.

이번 μ‚¬μ΄ν΄μ—μ„œλŠ” λ‹€μŒκ³Ό 같이 μ±…μž„μ„ λΆ„λ¦¬ν•˜μ˜€λ‹€.

- `Hand` β†’ μΉ΄λ“œ 점수 계산
- `Players` β†’ ν”Œλ ˆμ΄μ–΄ μ§‘ν•© 관리
- `GameResultJudge` β†’ 승패 νŒμ •
- `PlayerStatus` β†’ ν”Œλ ˆμ΄μ–΄ μƒνƒœ 관리

κ·Έ κ²°κ³Ό **κΈ°λŠ₯ μΆ”κ°€ μ‹œ μˆ˜μ • λ²”μœ„κ°€ νŠΉμ • 객체에 μ§‘μ€‘λ˜μ§€ μ•Šκ³  λΆ„μ‚°λ˜λ„λ‘ κ°œμ„ λ˜μ—ˆλ‹€.**

---

### κ·œμΉ™ 적용으둜 λ³€κ²½ν•œ μ½”λ“œ

νŒ€μ—μ„œ λ‹€μŒκ³Ό 같은 κ·œμΉ™μ„ μ •ν•˜μ˜€λ‹€.

- μ±…μž„ 뢄리 κΈ°μ€€
- **(If-Then)** λ§Œμ•½ νŠΉμ • μš”κ΅¬μ‚¬ν•­μ΄ λ³€κ²½λ˜μ—ˆμ„ λ•Œ, 그와 λ¬΄κ΄€ν•œ μ½”λ“œλ“€κΉŒμ§€ ν•œ 클래슀 μ•ˆμ—μ„œ ν•¨κ»˜ μˆ˜μ •ν•˜κ±°λ‚˜ ν…ŒμŠ€νŠΈν•΄μ•Ό ν•œλ‹€λ©΄ β†’ λ³€κ²½μ˜ 원인이 ν•˜λ‚˜κ°€ λ˜λ„λ‘ μ±…μž„μ„ λΆ„λ¦¬ν•˜μ—¬ 응집도λ₯Ό 높인닀.
- **(κΈ°μ€€)** λ³€κ²½μ˜ μ΄μœ κ°€ ν•˜λ‚˜ 이상일 λ•Œ λΆ„λ¦¬ν•œλ‹€.
- λ³€κ²½ λ²”μœ„ μ œν•œ κ·œμΉ™
- **(If-Then)** λ§Œμ•½ κΈ°λŠ₯ μΆ”κ°€ μ‹œ 3κ³³ μ΄μƒμ˜ 파일 μˆ˜μ •μ΄ ν•„μš”ν•˜λ©΄ β†’ 곡톡 λ‘œμ§μ„ μΆ”μΆœν•˜κ±°λ‚˜ μ±…μž„μ„ μž¬λΆ„λ°°ν•œλ‹€
- **(κΈ°μ€€)** μ±…μž„μ„ 적절히 μΊ‘μŠν™”ν•˜μ§€ λͺ»ν•΄, 단일 λ³€κ²½μ˜ νŒŒκΈ‰ νš¨κ³Όκ°€ μ—¬λŸ¬ 객체(3κ³³ 이상)둜 ν©μ–΄μ§ˆ λ•Œ λ³€κ²½ λ²”μœ„λ₯Ό μ œν•œν•œλ‹€.
- ν…ŒμŠ€νŠΈμ™€ μ„€κ³„μ˜ 관계 κ·œμΉ™
- **(If-Then)** λ§Œμ•½ 비ꡐ와 같은 연산을 μœ„ν•΄ ν•΄λ‹Ή 데이터λ₯Ό κ°€μ§„ 객체의 데이터λ₯Ό 직접 κΊΌλ‚΄μ™€μ„œ μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄ β†’ 데이터λ₯Ό κ°€μ§„ κ°μ²΄μ—κ²Œ 직접 물어보도둝(Tell, Don't Ask) μˆ˜μ •ν•˜μ—¬ λ³€κ²½ μ—¬νŒŒλ₯Ό 내뢀에 κ°€λ‘”λ‹€.
- **(κΈ°μ€€)** μ™ΈλΆ€μ—μ„œ 객체의 데이터λ₯Ό 직접 κΊΌλ‚΄μ–΄ μ—°μ‚°μ΄λ‚˜ νŒλ‹¨μ„ μˆ˜ν–‰ν•˜λŠ” 경우, 데이터λ₯Ό κ°€μ§„ κ°μ²΄μ—κ²Œ 직접 물어보도둝 λ³€κ²½ν•œλ‹€.

λͺ¨λ“  κ·œμΉ™μ„ 항상 μ˜μ‹ν•˜λ©΄μ„œ μž‘μ—…ν•˜μ§„ λͺ»ν•˜μ˜€μ§€λ§Œ, λŒ€ν‘œμ μœΌλ‘œ μ•„λž˜μ˜ κ·œμΉ™μ„ κ°€μž₯ μ˜μ‹ν•˜λ©΄μ„œ μž‘μ—…ν–ˆλ‹€.

> **Tell, Don't Ask**
>
> 객체의 데이터λ₯Ό 꺼내와 μ™ΈλΆ€μ—μ„œ νŒλ‹¨ν•˜μ§€ 말고
> ν•΄λ‹Ή κ°μ²΄μ—κ²Œ 직접 물어보도둝 ν•œλ‹€.

이 κ·œμΉ™μ„ μ μš©ν•˜λ©΄μ„œ, 기쑴에 도메인 객체의 ν•„λ“œ 값을 외뢀에 ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•˜λ˜ λ°©μ‹μ—μ„œ
도메인 객체 슀슀둜 ν–‰λ™ν•˜μ—¬ μƒνƒœ 값을 ν™œμš©ν•œ μ±…μž„μ„ 지도둝 ν•˜μ˜€κ³  μ™ΈλΆ€μ—μ„œλŠ” λ‚΄λΆ€ κ΅¬ν˜„μ„ λͺ°λΌλ„
μš”μ²­λ§ŒμœΌλ‘œ μ›ν•˜λŠ” 값을 얻을 수 μžˆλ„λ‘ ν•˜μ˜€λ‹€.

이λ₯Ό 톡해 응집도가 κ°μ†Œν•˜κ³ , 객체 κ°„μ˜ ν˜‘λ ₯ 관계λ₯Ό 기쑴보닀 κ°œμ„ λœ ν˜•νƒœλ‘œ ꡬ좕할 수 μžˆμ—ˆλ‹€κ³  μƒκ°ν•œλ‹€.

---

### ν…ŒμŠ€νŠΈκ°€ 섀계λ₯Ό λ„μš΄ μˆœκ°„

λ”œλŸ¬μ˜ μ΅œμ’… μˆ˜μ΅μ„ κ³„μ‚°ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄μ„œ
λ”œλŸ¬ μˆ˜μ΅μ„ λ³„λ„μ˜ κ·œμΉ™μœΌλ‘œ λ‹€μ‹œ κ³„μ‚°ν•˜κΈ°λ³΄λ‹€
**ν”Œλ ˆμ΄μ–΄ 수읡의 합에 음수λ₯Ό μ·¨ν•œ κ°’μœΌλ‘œ μ •μ˜ν•˜λŠ” ꡬ쑰**κ°€ 더 μžμ—°μŠ€λŸ½λ‹€λŠ” 점을 ν™•μΈν–ˆλ‹€.

```java
assertThat(firstPlayerResult.getProceeds()).isEqualTo(1000);
assertThat(secondPlayerResult.getProceeds()).isEqualTo(-2000);
assertThat(dealerResult.getProceeds()).isEqualTo(1000);
```
이 ν…ŒμŠ€νŠΈλ₯Ό 톡해
λ”œλŸ¬μ™€ ν”Œλ ˆμ΄μ–΄μ˜ μ •μ‚° λ‘œμ§μ„ 각각 λ”°λ‘œ 두기보닀
ν”Œλ ˆμ΄μ–΄ κ²°κ³Όλ₯Ό λ¨Όμ € κ³„μ‚°ν•œ λ’€ λ”œλŸ¬ κ²°κ³Όλ₯Ό ν•©μ‚°μœΌλ‘œ κ΅¬ν•˜λŠ” 것이
κ·œμΉ™ 쀑볡을 쀄이고 섀계λ₯Ό 더 λ‹¨μˆœν•˜κ²Œ λ§Œλ“ λ‹€λŠ” 점을 μ•Œ 수 μžˆμ—ˆλ‹€.

---

### 이번 λ―Έμ…˜μ—μ„œ 얻은 μΈμ‚¬μ΄νŠΈ

κΈ°λŠ₯ μΆ”κ°€ μžμ²΄λ³΄λ‹€ 더 크게 λŠλ‚€ 점은 λ‹€μŒμ΄λ‹€.

- 역할이 λͺ…ν™•ν•œ 객체 (`Card`, `Hand`, `Deck`) λŠ” 변화에 κ°•ν•˜λ‹€.
- μ—¬λŸ¬ μ±…μž„μ΄ μ„žμΈ 객체 (`GameManager`) λŠ” 변화에 μ•½ν•˜λ‹€.
- ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄μ„œ μ„€κ³„μ—μ„œ λΆˆμ•ˆμ •ν•œ 지점이 어디인지 νŒŒμ•…ν•  수 μžˆλ‹€.

이번 λ―Έμ…˜μ„ 톡해 ꡬ쑰에 λŒ€ν•œ 섀계가 잘λͺ» λ˜μ—ˆλŠ”μ§€ μ•Œμ•„μ±Œ 수 μžˆλŠ” μ‹ ν˜Έμ—λŠ” 무엇이 있고,
μ–΄λ–€ 섀계가 μœ μ—°ν•˜λ©΄μ„œλ„ μ•ˆμ •μ μΈ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλŠ”μ§€ μ•Œ 수 μžˆμ—ˆλ‹€.
Loading