Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
1da503b
refactor(domain): Card 클래슀λ₯Ό record둜 μ „ν™˜
gahyeonnni Mar 13, 2026
cc058b4
feat(domain): λ² νŒ… κΈˆμ•‘ 관리λ₯Ό μœ„ν•œ Money μΆ”κ°€
gahyeonnni Mar 13, 2026
b85a897
feat(dto): λ² νŒ… κΈˆμ•‘ 관리λ₯Ό μœ„ν•œ MoneyDTO μΆ”κ°€
gahyeonnni Mar 13, 2026
2bd3557
feat(domain): 덱 생성 μ±…μž„μ„ 뢄리
gahyeonnni Mar 13, 2026
904efb2
test(domain): 승패 결과와 λ² νŒ… κΈˆμ•‘ 검증을 μœ„ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€
gahyeonnni Mar 13, 2026
ff51b03
refactor(domain): CardSuitMap νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½
gahyeonnni Mar 13, 2026
1c569c5
refactor(domain): Dealer 클래슀 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½
gahyeonnni Mar 13, 2026
7540373
refactor(domain): Hand 클래슀 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½ 및 record둜 μ „ν™˜
gahyeonnni Mar 13, 2026
ac7eb2e
refactor(domain): Name 클래슀 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½ 및 record둜 μ „ν™˜
gahyeonnni Mar 13, 2026
d45e1dc
feat(domain): Outcome 클래슀 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½ 및 λΈ”λž™μž­ 승패 νŒλ³„ 및 λ°°λ‹Ήλ₯  둜직 μΆ”κ°€
gahyeonnni Mar 13, 2026
c181ba7
refactor(domain): Participant 클래슀 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½ 및 λΈ”λž™μž­ 확인, μΉ΄λ“œ λͺ©λ‘ λ°˜ν™˜ 둜직 κ΅¬ν˜„
gahyeonnni Mar 13, 2026
268fe7b
refactor(dto): Outcome νŒ¨ν‚€μ§€ 이동에 λ”°λ₯Έ import 경둜 μˆ˜μ •
gahyeonnni Mar 13, 2026
e0e7145
refactor(message): 좜λ ₯ λ©”μ„Έμ§€ μΆ”κ°€
gahyeonnni Mar 13, 2026
569ebfc
feat(dto): 도메인 객체 λ³€ν™˜μ„ μœ„ν•œ 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œ μΆ”κ°€
gahyeonnni Mar 13, 2026
9a30ff3
feat(domain): Player에 λ°°νŒ… κΈˆμ•‘ 속성 μΆ”κ°€ 및 λΈ”λž™μž­ μ‹œ λ“œλ‘œμš° λ°©μ§€ 쑰건 μΆ”κ°€
gahyeonnni Mar 13, 2026
21d97c6
refactor(domain): Players 클래슀λ₯Ό record둜 μ „ν™˜ν•˜κ³  이름 좜λ ₯ 둜직 μΆ”κ°€
gahyeonnni Mar 13, 2026
d74b589
refactor(controller): κ²Œμž„ μ§„ν–‰ 흐름 κ°œμ„  및 λ°°νŒ… 둜직 μΆ”κ°€
gahyeonnni Mar 13, 2026
fa2598d
refactor(domain): Deck 클래슀 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½ 및 record둜 μ „ν™˜
gahyeonnni Mar 13, 2026
9dd0c9f
refactor(domain): GameResult 클래슀 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½
gahyeonnni Mar 13, 2026
e2c573f
refactor(view): λ² νŒ… κΈˆμ•‘ μž…λ ₯ 둜직 μΆ”κ°€
gahyeonnni Mar 13, 2026
3e9e6c8
refactor(view): λ² νŒ… κΈˆμ•‘ 좜λ ₯ 둜직 μΆ”κ°€
gahyeonnni Mar 13, 2026
fa98d95
refactor(util): NameParser의 λ°˜ν™˜ νƒ€μž…μ„ λ³€κ²½
gahyeonnni Mar 13, 2026
a4266b0
refactor(domain): Score 클래슀 νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½ 및 record둜 μ „ν™˜
gahyeonnni Mar 13, 2026
4ff24ce
test(util): NameParser λ°˜ν™˜ νƒ€μž… 변경에 맞좰 ν…ŒμŠ€νŠΈ μ½”λ“œ μˆ˜μ •
gahyeonnni Mar 13, 2026
d7945e4
test(domain): 클래슀 νŒ¨ν‚€μ§€ 이동에 λ”°λ₯Έ HandTest import 경둜 μˆ˜μ •
gahyeonnni Mar 13, 2026
2e9fd10
test(domain): 클래슀 νŒ¨ν‚€μ§€ 이동에 λ”°λ₯Έ ScoreTest import 경둜 μˆ˜μ •
gahyeonnni Mar 13, 2026
fcc7d80
test(domain): Player μƒμ„±μž λ³€κ²½ 및 Hand λ©”μ„œλ“œ μˆ˜μ •μ‚¬ν•­ 반영
gahyeonnni Mar 13, 2026
a4ed4b0
refactor(domain): CardSuitMap에 private μƒμ„±μž μΆ”κ°€
gahyeonnni Mar 15, 2026
67adfab
refactor(domain): DeckFactory에 private μƒμ„±μž μΆ”κ°€
gahyeonnni Mar 16, 2026
c524a39
docs: README.md 수읡 계산 둜직 및 μš”κ΅¬μ‚¬ν•­ 상세화
gahyeonnni Mar 16, 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
27 changes: 21 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,45 @@
### κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­ 체크리슀트

- [x] κ²Œμž„μ— μ°Έμ—¬ν•  μ‚¬λžŒμ˜ 이름을 μ‰Όν‘œ(,) κΈ°μ€€μœΌλ‘œ μž…λ ₯λ°›μ•„ λΆ„λ¦¬ν•œλ‹€.
- [x] μ‚¬μš©μžλ‘œλΆ€ν„° λ² νŒ… κΈˆμ•‘μ„ μž…λ ₯λ°›λŠ”λ‹€.
- [x] 0λΆ€ν„° 51 μ‚¬μ΄μ˜ λ‚œμˆ˜λ₯Ό 생성해 λ¬΄λŠ¬μ™€ μˆ«μžκ°€ λ§€ν•‘λœ 쀑볡 μ—†λŠ” μΉ΄λ“œλ₯Ό λ°œκΈ‰ν•œλ‹€.
- [x] κ²Œμž„ μ‹œμž‘ μ‹œ λ”œλŸ¬μ™€ ν”Œλ ˆμ΄μ–΄μ—κ²Œ 각각 2μž₯μ”© μΉ΄λ“œλ₯Ό λΆ„λ°°ν•œλ‹€.
- [x] λ”œλŸ¬μ˜ 초기 μΉ΄λ“œλŠ” 1μž₯만 보여주고, ν”Œλ ˆμ΄μ–΄λŠ” λ³΄μœ ν•œ λͺ¨λ“  μΉ΄λ“œλ₯Ό 보여쀀닀.
- [x] ν”Œλ ˆμ΄μ–΄λŠ” μΉ΄λ“œ 합계가 21을 λ„˜μ§€ μ•ŠλŠ” ν•œ κ³„μ†ν•΄μ„œ μΉ΄λ“œλ₯Ό 더 받을 수 μžˆλ‹€.
- [x] μΉ΄λ“œμ˜ 합을 계산할 λ•Œ K, Q, JλŠ” 10으둜 κ³„μ‚°ν•˜κ³ , AλŠ” 11둜 κ³„μ‚°ν•˜κ³  21을 μ΄ˆκ³Όν•˜λ©΄ 1둜 κ³„μ‚°ν•œλ‹€.
- [x] λ”œλŸ¬λŠ” μ²˜μŒμ— 받은 2μž₯의 합계가 16 μ΄ν•˜μ΄λ©΄ 무쑰건 1μž₯의 μΉ΄λ“œλ₯Ό μΆ”κ°€λ‘œ λ°›κ³ , 17 이상이면 λ°›μ§€ μ•ŠλŠ”λ‹€.
- [x] λ”œλŸ¬μ™€ ν”Œλ ˆμ΄μ–΄μ˜ 턴이 λͺ¨λ‘ λλ‚˜λ©΄ 각자의 μ΅œμ’… μΉ΄λ“œ λͺ©λ‘κ³Ό 점수λ₯Ό 좜λ ₯ν•œλ‹€.
- [x] μ΅œμ’… 점수λ₯Ό 비ꡐ해 λ”œλŸ¬μ™€ 각 ν”Œλ ˆμ΄μ–΄μ˜ 승/패/무 κ²°κ³Όλ₯Ό κ³„μ‚°ν•˜κ³  좜λ ₯ν•œλ‹€.
- [x] μ΅œμ’… μ μˆ˜μ™€ λ”œλŸ¬μ™€ 각 ν”Œλ ˆμ΄μ–΄μ˜ λ²„μŠ€νŠΈ/λΈ”λž™μž­/승패 κ²°κ³Όλ₯Ό 톡해 μ΅œμ’… μˆ˜μ΅μ„ 계산해 좜λ ₯ν•œλ‹€.

### μ£Όμš” 둜직 μš”μ•½

- **μΉ΄λ“œ 생성**
- `Card`μ—μ„œ `0~51` λ²”μœ„μ˜ λ‚œμˆ˜λ₯Ό 뽑아 μΉ΄λ“œ 번호λ₯Ό λ§Œλ“ λ‹€.
- `DeckFactory`μ—μ„œ `0~51` λ²”μœ„μ˜ μΉ΄λ“œλ₯Ό 생성해 'Deck' μ—μ„œ shuffle 둜 μΉ΄λ“œλ₯Ό λ¬΄μž‘μœ„λ‘œ μ„žλŠ”λ‹€.
- **μΉ΄λ“œ 이름/점수 λ§€ν•‘**
- μΉ΄λ“œ 번호λ₯Ό `shape(무늬)`와 `number(랭크)`둜 뢄리해 λ¬Έμžμ—΄ μΉ΄λ“œλͺ…μœΌλ‘œ λ³€ν™˜ν•œλ‹€.
- μ μˆ˜λŠ” `A=11`, `2~10=μˆ«μžκ°’`, `J/Q/K=10`으둜 κ³„μ‚°ν•œλ‹€.
- **쀑볡 μ—†λŠ” μΉ΄λ“œ 보μž₯**
- `DuplicationSet`에 이미 λ‚˜μ˜¨ 번호λ₯Ό μ €μž₯ν•΄, 쀑볡 λ²ˆν˜Έκ°€ λ‚˜μ˜€λ©΄ λ‹€μ‹œ λ½‘λŠ”λ‹€.
- `Deck`μ—μ„œ μΉ΄λ“œλ₯Ό 뽑을 λ•Œλ§ˆλ‹€ List의 첫 번째 μš”μ†Œλ₯Ό μ œκ±°ν•˜λ©° λ°˜ν™˜
- **λ²„μŠ€νŠΈμ™€ A 점수 보정**
- ν”Œλ ˆμ΄μ–΄ μ μˆ˜κ°€ 21을 μ΄ˆκ³Όν•˜λ©΄, λ³΄μœ ν•œ A 개수만큼 `11 -> 1` 보정(10점 차감)을 μ μš©ν•œλ‹€.
- **κ²Œμž„ μ§„ν–‰**
- μ‹œμž‘ μ‹œ λ”œλŸ¬/ν”Œλ ˆμ΄μ–΄ λͺ¨λ‘ 2μž₯ λ°°λΆ„
- ν”Œλ ˆμ΄μ–΄λŠ” μž…λ ₯(`y/n`)으둜 μΆ”κ°€ μΉ΄λ“œ 선택
- λ”œλŸ¬λŠ” 합계가 16 μ΄ν•˜μΌ λ•Œ μžλ™μœΌλ‘œ μΆ”κ°€ μΉ΄λ“œ λ“œλ‘œμš°
- **승패 계산**
- λ²„μŠ€νŠΈλŠ” `-1` 처리 ν›„ λ”œλŸ¬μ™€ 각 ν”Œλ ˆμ΄μ–΄ 점수λ₯Ό 비ꡐ해 `승/패/무`λ₯Ό κΈ°λ‘ν•œλ‹€.

- **수읡 계산**
- ν”Œλ ˆμ΄μ–΄μ˜ μΉ΄λ“œκ°€ 21을 μ΄ˆκ³Όν•  경우 λ² νŒ… κΈˆμ•‘μ„ λͺ¨λ‘ μžƒκ²Œ λœλ‹€
- 처음 두 μž₯의 μΉ΄λ“œ 합이 21일 경우 λΈ”λž™μž­μ΄ 되면 λ² νŒ… κΈˆμ•‘μ˜ 1.5 λ°°λ₯Ό λ”œλŸ¬μ—κ²Œ λ°›λŠ”λ‹€.
- λ”œλŸ¬μ™€ ν”Œλ ˆμ΄μ–΄ λͺ¨λ‘ λΈ”λž™μž­μΈ 경우 λ² νŒ… κΈˆμ•‘μ„ λŒλ €λ°›λŠ”λ‹€.
- λ”œλŸ¬κ°€ 21을 μ΄ˆκ³Όν•˜λ©΄ 남아 있던 ν”Œλ ˆμ΄μ–΄λ“€μ€ νŒ¨μ— 상관 없이 λ² νŒ… κΈˆμ•‘μ„ λ°›λŠ”λ‹€.

### μ΅œμ’… 수읡 계산

| 상황 | κ²°κ³Ό | 수읡 배율 | λΉ„κ³  |
|:-----------------------------|:----|:-----:|:------------------|
| **ν”Œλ ˆμ΄μ–΄ λ²„μŠ€νŠΈ(Bust)** | 패배 | -1.0 | λ² νŒ… κΈˆμ•‘ 상싀 |
| **ν”Œλ ˆμ΄μ–΄ λΈ”λž™μž­ & λ”œλŸ¬ λΈ”λž™μž­ μ•„λ‹˜** | 승리 | +1.5 | λ² νŒ… κΈˆμ•‘μ˜ 1.5λ°° 수읡 λ°œμƒ |
| **ν”Œλ ˆμ΄μ–΄ & λ”œλŸ¬ λͺ¨λ‘ λΈ”λž™μž­** | λ¬΄μŠΉλΆ€ | 0 | λ² νŒ… κΈˆμ•‘ λŒλ €λ°›μŒ |
| **ν”Œλ ˆμ΄μ–΄ 21 μ΄ν•˜ & λ”œλŸ¬ λ²„μŠ€νŠΈ** | 승리 | +1.0 | λ² νŒ… κΈˆμ•‘λ§ŒνΌ 수읡 λ°œμƒ |
| **λ‘˜ λ‹€ 21 μ΄ν•˜ (ν”Œλ ˆμ΄μ–΄ 점수 > λ”œλŸ¬)** | 승리 | +1.0 | λ² νŒ… κΈˆμ•‘λ§ŒνΌ 수읡 λ°œμƒ |
| **λ‘˜ λ‹€ 21 μ΄ν•˜ (ν”Œλ ˆμ΄μ–΄ 점수 < λ”œλŸ¬)** | 패배 | -1.0 | λ² νŒ… κΈˆμ•‘ 상싀 |
| **λ‘˜ λ‹€ 21 μ΄ν•˜ (ν”Œλ ˆμ΄μ–΄ 점수 = λ”œλŸ¬)** | λ¬΄μŠΉλΆ€ | 0 | λ² νŒ… κΈˆμ•‘ λŒλ €λ°›μŒ |
119 changes: 58 additions & 61 deletions src/main/java/controller/BlackJackGame.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
package controller;

Choose a reason for hiding this comment

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

READMEκ°€ 아직 사이클1 체크리슀트 쀑심이라 이번 μ‚¬μ΄ν΄μ—μ„œ μΆ”κ°€λœ λ°°νŒ… κ·œμΉ™μ΄ 잘 μ•ˆ λ³΄μ΄λ„€μš”.

λ¬Έμ„œ 관리도 κ½€λ‚˜ μ€‘μš”ν•œ μΌμ΄λ‹ˆ, ν•œ 번 μ—…λ°μ΄νŠΈ ν•΄λ³ΌκΉŒμš”?

Copy link
Author

Choose a reason for hiding this comment

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

μš”κ΅¬μ‚¬ν•­ μ²΄ν¬λ¦¬μŠ€νŠΈμ™€ μ΅œμ’… 수읡 계산 κ·œμΉ™μ„ μ •λ¦¬ν•΄μ„œ μ˜¬λ ΈμŠ΅λ‹ˆλ‹€! ( c524a39 컀밋 )


import domain.Card;
import domain.Dealer;
import domain.Deck;
import domain.GameResult;
import domain.Outcome;
import domain.Participant;
import domain.Player;
import domain.Players;
import dto.AllOutcomeDto;
import domain.card.Deck;
import domain.card.DeckFactory;
import domain.participant.Dealer;
import domain.participant.Money;
import domain.participant.Player;
import domain.participant.Players;
import domain.result.Outcome;
import dto.FinalScoreDto;
import dto.InitialDto;
import dto.MoneyDTO;
import dto.ParticipantDto;
import dto.ParticipantScoreDto;
import dto.PlayerOutcomeDto;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import util.NameParser;
import view.InputView;
Expand All @@ -34,46 +30,61 @@ public BlackJackGame(InputView inputView, ResultView resultView) {
}

public void run() {
Deck deck = createDeck();
Deck deck = DeckFactory.create();
Dealer dealer = new Dealer();
Players players = NameParser.makeNameList(inputView.getParticipant());
Players players = setupPlayers();
playGame(deck, dealer, players);
}

private void playGame(Deck deck, Dealer dealer, Players players) {
initialDraw(deck, dealer, players);
printInitialStatus(dealer, players);
players.getPlayers().forEach(player -> drawPlayerTurn(deck, player));
if (dealer.isFirstBlackJack()) {
printResults(dealer, players);
return;
}
players.players().forEach(player -> drawPlayerTurn(deck, player));
drawDealerTurn(deck, dealer);
printResults(dealer, players);
}

private void printResults(Dealer dealer, Players players) {
printFinalScore(dealer, players);
printFinalWinner(dealer, players);
printFinalProfit(dealer, players);
}

private Deck createDeck() {
List<Card> cards = IntStream.range(0, 52)
.mapToObj(Card::new)
.collect(Collectors.toList());
return new Deck(cards);
private Players setupPlayers() {
List<String> playerNames = NameParser.makeNameList(inputView.getParticipant());
List<Player> players = new ArrayList<>();
for (String name : playerNames) {
String money = inputView.getMoney(name);
players.add(new Player(name, new Money(money)));
}
return new Players(players);
}

private void initialDraw(Deck deck, Dealer dealer, Players players) {
IntStream.range(0, 2).forEach(i -> {
dealer.drawCard(deck.draw());
players.getPlayers().forEach(player -> player.drawCard(deck.draw()));
players.players().forEach(player -> player.drawCard(deck.draw()));
});
}

private void printInitialStatus(Dealer dealer, Players players) {
ParticipantDto dealerDto = new ParticipantDto(dealer.getName(), getCardNames(dealer));
List<ParticipantDto> participantDtos = players.getPlayers().stream()
.map(player -> new ParticipantDto(player.getName(), getCardNames(player)))
.collect(Collectors.toList());
String joinedNames = players.getPlayers().stream()
.map(Player::getName)
.collect(Collectors.joining(", "));
resultView.printGameStart(new InitialDto(joinedNames, dealerDto, participantDtos));
ParticipantDto dealerDto = ParticipantDto.from(dealer);
List<ParticipantDto> participants =
players.players()
.stream()
.map(ParticipantDto::from)
.toList();
String joinedNames = players.getJoinedNames();
resultView.printGameStart(new InitialDto(joinedNames, dealerDto, participants));
}

private void drawPlayerTurn(Deck deck, Player player) {
while (player.canDraw() && inputView.getMoreCards(player.getName()).equals("y")) {
player.drawCard(deck.draw());
resultView.printParticipantMoreCard(new ParticipantDto(player.getName(), getCardNames(player)));
resultView.printParticipantMoreCard(ParticipantDto.from(player));
}
}

Expand All @@ -84,39 +95,25 @@ private void drawDealerTurn(Deck deck, Dealer dealer) {
}
}

private void printFinalWinner(Dealer dealer, Players players) {
Map<Player, Outcome> playerResults = new LinkedHashMap<>();
List<PlayerOutcomeDto> outcomeDtos = new ArrayList<>();
for (Player player : players.getPlayers()) {
Outcome outcome = Outcome.decideWinner(player.getScore(), dealer.getScore());
playerResults.put(player, outcome);
outcomeDtos.add(new PlayerOutcomeDto(player.getName(), outcome.getName()));
}
GameResult gameResult = new GameResult(playerResults);
resultView.printWinner(new AllOutcomeDto(gameResult.getDealerResult(), outcomeDtos));
}

private void printFinalScore(Dealer dealer, Players players) {
ParticipantScoreDto dealerScoreDto = createScoreDto(dealer);
List<ParticipantScoreDto> playerScoreDtos = players.getPlayers().stream()
.map(this::createScoreDto)
.collect(Collectors.toList());
ParticipantScoreDto dealerScoreDto = ParticipantScoreDto.from(dealer);
List<ParticipantScoreDto> playerScoreDtos =
players.players()
.stream()
.map(ParticipantScoreDto::from)
.toList();
resultView.printResult(new FinalScoreDto(dealerScoreDto, playerScoreDtos));
}

private ParticipantScoreDto createScoreDto(Participant participant) {
return new ParticipantScoreDto(
participant.getName(),
getCardNames(participant),
participant.getScore().getGameScore()
);
}

private List<String> getCardNames(Participant participant) {
List<String> cardNames = new ArrayList<>();
for (Card card : participant.getHand().getCards()) {
cardNames.add(card.getCardName());
private void printFinalProfit(Dealer dealer, Players players) {
int dealerProfit = 0;

Choose a reason for hiding this comment

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

μ΄λ²ˆμ— Moneyλ₯Ό λ„μž…ν•˜μ…¨λŠ”λ°, μ •μž‘ μ΅œμ’… μˆ˜μ΅μ„ κ³„μ‚°ν•˜λŠ” 핡심 값은 λ‹€μ‹œ int μ›μ‹œκ°’μ„ μ‚¬μš©ν•΄μš”. μš”κ΅¬μ‚¬ν•­μ˜ "λͺ¨λ“  μ›μ‹œ κ°’ 포μž₯"을 μ—„κ²©ν•˜κ²Œ 보면 이런 돈 κ΄€λ ¨ 값은 λκΉŒμ§€ Money둜 κ°€μ Έκ°€λŠ” 편이 더 μžμ—°μŠ€λŸ¬μ›Œ λ³΄μ—¬μš”.

μš”κ΅¬μ‚¬ν•­ 뿐만 μ•„λ‹ˆλΌ 돈 κ΄€λ ¨ 값은 Money 객체둜 λ¬Άκ³ , κ΄€λ ¨λœ 검증 λ˜λŠ” 계산 λ‘œμ§μ„ 거기에 λ‹΄λŠ”κ²Œ λ―Όκ°ν•œ 돈 κ΄€λ ¨ λ‘œμ§μ„ λ‹€λ£° λ•Œ 훨씬 쒋기도 ν•˜κ³ μš”.

κ°•ν•˜κ²Œ μ–˜κΈ°ν•΄λ³΄λ©΄, 단지 클래슀λ₯Ό λ§Œλ“€μ—ˆλ‹€κ³  ν•΄μ„œ 끝이 μ•„λ‹™λ‹ˆλ‹€ :)

List<PlayerOutcomeDto> outcomeDtos = new ArrayList<>();
for (Player player : players.players()) {
Outcome outcome = Outcome.decideWinner(player, dealer);
Money playerProfit = player.getMoney().multiply(outcome.getRate());

Choose a reason for hiding this comment

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

ν˜„λ―Έλ°₯의 getter 에 λŒ€ν•œ 생각이 κΆκΈˆν•΄μš”.
player λ‘œλΆ€ν„° money λ₯Ό getMoney() 둜 μΆ”μΆœν•˜κΈ°λ³΄λ‹¨, money λ₯Ό κ°€μ§€κ³  μžˆλŠ” player μ—κ²Œ κ³„μ‚°ν•˜λŠ” 역할을 λ„˜κ²¨μ£Όλ©΄ μ–΄λ–¨κΉŒμš”?

μš”λ¦¬λ₯Ό ν•  수 μžˆλŠ” κ°μ²΄λ‘œλΆ€ν„° 재료λ₯Ό λΉΌμ™€μ„œ μš”λ¦¬λ₯Ό ν•˜μ§€ μ•Šκ³ , κ·Έ 객체가 μš”λ¦¬λ₯Ό ν•  수 μžˆλ„λ‘ ν•˜λŠ”κ±°μ£ .
μ–΄λ €μš΄ λ§λ‘œλŠ” λ””λ―Έν„°μ˜ 법칙을 지킀라고도 ν•©λ‹ˆλ‹€ :)

λ‹€λ₯Έ getter 듀도 λ‹€ ν™•μΈν•΄μ£Όμ„Έμš”.

dealerProfit -= playerProfit.getAmount();
outcomeDtos.add(PlayerOutcomeDto.of(player, playerProfit));
}
return cardNames;
resultView.printScore(new MoneyDTO(String.valueOf(dealerProfit), outcomeDtos));
}
}
}
44 changes: 0 additions & 44 deletions src/main/java/domain/Outcome.java

This file was deleted.

12 changes: 0 additions & 12 deletions src/main/java/domain/Player.java

This file was deleted.

24 changes: 0 additions & 24 deletions src/main/java/domain/Players.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
package domain;

public class Card {
private final int card;

public Card(int card) {
this.card = card;
}
package domain.card;

public record Card(int card) {

Choose a reason for hiding this comment

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

Card λ₯Ό ν¬ν•¨ν•˜μ—¬ κ½€ λ§Žμ€ 도메인 ν΄λž˜μŠ€λ“€μ„ record 둜 λ³€κ²½ν•΄μ£Όμ‹  계기가 κΆκΈˆν•΄μš”.
μ •λ§λ‘œ κΆκΈˆν•΄μ„œ λ‚¨κΈ°λŠ” μ§ˆλ¬Έμ΄λ‹ˆ νŽΈν•˜κ²Œ μ–˜κΈ°ν•΄μ£Όμ„Έμš”.

그리고 μ•žμ„œ ν…ŒμŠ€νŠΈ 컀버리지에 λŒ€ν•΄ λ§ν•΄λ΄€λŠ”λ°,
Card κ΄€λ ¨ ν…ŒμŠ€νŠΈλ„ κΌ­ μΆ”κ°€λ˜μ—ˆμœΌλ©΄ μ’‹κ³˜μ–΄μš”!

μ™œλƒν•˜λ©΄ μ§€κΈˆμ€ new Card(-1) 도 ν—ˆμš©λ˜κ±°λ“ μš”.

public String getCardName() {
int shape = card / 13;
int number = card % 13;
Expand All @@ -15,23 +9,16 @@ public String getCardName() {

public int getScore() {
int cardNumber = card % 13;

if (1 <= cardNumber && cardNumber <= 9) {
return cardNumber + 1;
}

if (cardNumber >= 10) {
return 10;
}

return 11;
}

public boolean isAce() {
return card % 13 == 0;
}

public int getCard() {
return card;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package domain;
package domain.card;

import java.util.Map;

Expand Down Expand Up @@ -26,6 +26,10 @@ public final class CardSuitMap {
Map.entry(12, "K")
);

private CardSuitMap() {

}

public static String getSuit(int shape) {
return SUIT_MAP.get(shape);
}
Expand All @@ -34,3 +38,4 @@ public static String getRank(int number) {
return RANK_MAP.get(number);
}
}

Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package domain;
package domain.card;

import java.util.Collections;
import java.util.List;

public class Deck {
private final List<Card> cards;

public record Deck(List<Card> cards) {

Choose a reason for hiding this comment

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

Deck 도 record둜 λ°”κΎΈμ…¨κ΅°μš”?

μ—¬κΈ°μ„œλ„ μž¬λ°ŒλŠ” μ£Όμ œκ°€ μžˆλŠ”λ°μš”,
ν˜„μž¬ 덱 생성을 μœ„ν•΄ ν•„μš”ν•œ List<Card> cards λŠ” 덱이 λ§Œλ“€μ–΄μ§„ 이후에도 μ™ΈλΆ€μ—μ„œ 값을 μ‘°μž‘ν•  수 μžˆμ–΄μš”.
이λ₯Ό λ°©μ§€ ν•  수 μžˆλŠ” 방법은 μ—†μ„κΉŒμš”?

(κΌ­ λ„μž…ν•˜μ§€λŠ” μ•Šμ•„λ„ λ˜μ§€λ§Œ, 도움이 될 μ£Όμ œμ˜ˆμš”.)

public Deck(List<Card> cards) {
this.cards = cards;
shuffle();
Expand Down
Loading