-
Notifications
You must be signed in to change notification settings - Fork 8
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단계 리퀘스트 #1
base: Revivekirin
Are you sure you want to change the base?
Conversation
DecideResult.java에서 아래 사항 필요
|
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.
안녕하세요 지혜님!!
현재 DecideResult에 return 값이 없어서 컴파일이 되지 않는군요 😂
이번 미션에서는 1단계만 진행해도 좋으니 아래 요구사항 들을 우선적으로 반영해주세요!!
현재 코드에 대한 몇가지 리뷰는 남겼지만 무엇보다 객체지향적으로 기능을 완성시키는 것이 중요하기 때문에 자세한 리뷰는 먼저 기능을 완성한 후에 이야기 나눠보도록 하겠습니다!!
우선순위 높음
- 1단계 기능 요구사항 만족
- InputView, OutputView 분리
- 적절한 객체 생성(Player, Dealer, BlackjackGame)과 메서드 할당
우선순위 중간
- mvc 패턴 학습 후 적용
- 테스트 코드 추가
public static class ParticipantState { | ||
private int sum; | ||
private List<String> cardlist; |
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.
내부 class를 사용해주셨군요!
저만의 내부 class 사용 기준을 공유드리자면
내부 클래스 어떻게 쓰는가?
내부 클래스는 크게 non-static, static으로 선언할 수 있습니다.
다만 non-static class는 메모리 누수를 발생시킬 수 있어서 외부 클래스(내부 클래스가 정의된 클래스)에서 사용되는 상황에만 사용합니다. 참고 글
내부 클래스 언제 쓰는가?
사실 내부 클래스 자체를 거의 사용하지 않지만 사용한다면
non-static 클래스의 경우
외부 클래스(내부 클래스가 정의된 클래스)에서만 사용하는 interface 구현체가 있다면
어차피 항상 같이 사라지거나 변경되고 외부 클래스만 사용하기 때문에 내부 class를 사용합니다.
static 클래스의 경우
외부 클래스에 대한 converter 같은 객체를 정의할 때 사용합니다.
non-static 클래스와의 차이는 외부 클래스가 아닌 다른 class에서 접근이 가능하다는 점입니다.
앞서 말했듯이 저는 inner class를 대부분 사용하지 않습니다.
내부 class는 응집도를 높혀주지만 class 파악이 힘들어지기 때문이죠 ㅎㅎ
그렇기 때문에 위와 같이 converter 혹은 내부에서만 사용되는 interface 구현체에만 사용합니다!
이 기준은 추후에 바뀔 수 있으나 지금 단계에서는 객체로 온전히 분리해서 구현해주셔도 좋을 것 같습니다 ㅎㅎ
public static void main(String[] args) { | ||
Map<String, List<Integer>> Cards = CardDictionary.createCardDictionary(); | ||
|
||
List<String> Dealer = Arrays.asList("딜러"); | ||
List<String> participants = getInput("게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)", s -> Arrays.asList(s.split(","))); | ||
ParticipantSize(participants); //예외 처리 | ||
|
||
Collections.shuffle(participants); | ||
|
||
Map<String, CardGameSimulator.ParticipantState> participantStates = CardGameSimulator.simulateCardGame(participants, Cards); | ||
Map<String, CardGameSimulator.ParticipantState> dealerState = CardGameSimulator.simulateCardGame(Dealer, Cards); | ||
|
||
for (String participant : participants) { | ||
for (Map.Entry<String, CardGameSimulator.ParticipantState> entry : participantStates.entrySet()) { | ||
Between16And21.SumBetween16And21(participant, entry, Cards); | ||
} | ||
} | ||
|
||
|
||
for (Map.Entry<String, CardGameSimulator.ParticipantState> entry : dealerState.entrySet()) { | ||
Between16And21.DealerBetween16And21(Dealer.get(0), entry, Cards); | ||
} | ||
|
||
|
||
for (String participant : participants) { | ||
for (Map.Entry<String, CardGameSimulator.ParticipantState> entry : participantStates.entrySet()) { | ||
DecideResult.CompareWithDealer(); | ||
} | ||
|
||
} | ||
} |
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.
main 메서드가 static이기 때문에 다른 메서드들도 대부분 static 으로 작성된 것 같군요!!
이에 관련해서 팁을 드리자면
BlackJackGame이란 객체를 만들고 main 에서는
BlackJackGame blackJackGame = new BlackJaclGame(...)
backjackGame.startGame()
을 main에서 호출하는 것으로 변경하면 static method를 줄일 수 있을 겁니다!!
import java.util.Map; | ||
import java.util.Scanner; | ||
|
||
public class Between16And21 { |
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.
객체지향은 현실에 있을 법한 네이밍을 가진 객체에서 적절한 책임을 분배하는 것이 중요합니다.
그래서 내부에 정의된 메서드들을 Player, Delear라는 객체로 만들고
canReceiveCard 과 같은 메서드들을 통해 대체하도록 만드는 것이 좋아보입니다!
딜러가 카드를 받을 수 있는 규칙을 딜러가 정의한다면 적절한 책임 분배라 볼 수 있겠죠?
수정해서 다시 엄로드 하겠습니다
피드백 감사합니다!
2024년 1월 30일 (화) 오후 1:29, Guga ***@***.***>님이 작성:
… ***@***.**** requested changes on this pull request.
안녕하세요 지혜님!!
현재 DecideResult에 return 값이 없어서 컴파일이 되지 않는군요 😂
이번 미션에서는 1단계만 진행해도 좋으니 아래 요구사항 들을 우선적으로 반영해주세요!!
현재 코드에 대한 몇가지 리뷰는 남겼지만 무엇보다 객체지향적으로 기능을 완성시키는 것이 중요하기 때문에 자세한 리뷰는 먼저 기능을
완성한 후에 이야기 나눠보도록 하겠습니다!!
우선순위 높음
1. 1단계 기능 요구사항 만족
2. InputView, OutputView 분리
3. 적절한 객체 생성(Player, Dealer, BlackjackGame)과 메서드 할당
우선순위 중간
1. mvc 패턴 학습 후 적용
2. 테스트 코드 추가
------------------------------
In src/main/java/blackjack/DecideResult.java
<#1 (comment)>:
> + public static int DealerScore() {
+
+ }
해당 메서드가 return 값이 없어서 컴파일 에러가 나네요 😂
------------------------------
In src/main/java/blackjack/CardGameSimulator.java
<#1 (comment)>:
> + public static class ParticipantState {
+ private int sum;
+ private List<String> cardlist;
내부 class를 사용해주셨군요!
저만의 내부 class 사용 기준을 공유드리자면
내부 클래스 어떻게 쓰는가?
내부 클래스는 크게 non-static, static으로 선언할 수 있습니다.
다만 non-static class는 메모리 누수를 발생시킬 수 있어서 외부 클래스(내부 클래스가 정의된 클래스)에서 사용되는
상황에만 사용합니다. 참고 글
<https://tecoble.techcourse.co.kr/post/2020-11-05-nested-class/>
내부 클래스 언제 쓰는가?
사실 내부 클래스 자체를 거의 사용하지 않지만 사용한다면
non-static 클래스의 경우
외부 클래스(내부 클래스가 정의된 클래스)에서만 사용하는 interface 구현체가 있다면
어차피 항상 같이 사라지거나 변경되고 외부 클래스만 사용하기 때문에 내부 class를 사용합니다.
static 클래스의 경우
외부 클래스에 대한 converter 같은 객체를 정의할 때 사용합니다.
non-static 클래스와의 차이는 외부 클래스가 아닌 다른 class에서 접근이 가능하다는 점입니다.
앞서 말했듯이 저는 inner class를 대부분 사용하지 않습니다.
내부 class는 응집도를 높혀주지만 class 파악이 힘들어지기 때문이죠 ㅎㅎ
그렇기 때문에 위와 같이 converter 혹은 내부에서만 사용되는 interface 구현체에만 사용합니다!
이 기준은 추후에 바뀔 수 있으나 지금 단계에서는 객체로 온전히 분리해서 구현해주셔도 좋을 것 같습니다 ㅎㅎ
------------------------------
In src/main/java/blackjack/Application.java
<#1 (comment)>:
> + public static void main(String[] args) {
+ Map<String, List<Integer>> Cards = CardDictionary.createCardDictionary();
+
+ List<String> Dealer = Arrays.asList("딜러");
+ List<String> participants = getInput("게임에 참여할 사람의 이름을 입력하세요.(쉼표 기준으로 분리)", s -> Arrays.asList(s.split(",")));
+ ParticipantSize(participants); //예외 처리
+
+ Collections.shuffle(participants);
+
+ Map<String, CardGameSimulator.ParticipantState> participantStates = CardGameSimulator.simulateCardGame(participants, Cards);
+ Map<String, CardGameSimulator.ParticipantState> dealerState = CardGameSimulator.simulateCardGame(Dealer, Cards);
+
+ for (String participant : participants) {
+ for (Map.Entry<String, CardGameSimulator.ParticipantState> entry : participantStates.entrySet()) {
+ Between16And21.SumBetween16And21(participant, entry, Cards);
+ }
+ }
+
+
+ for (Map.Entry<String, CardGameSimulator.ParticipantState> entry : dealerState.entrySet()) {
+ Between16And21.DealerBetween16And21(Dealer.get(0), entry, Cards);
+ }
+
+
+ for (String participant : participants) {
+ for (Map.Entry<String, CardGameSimulator.ParticipantState> entry : participantStates.entrySet()) {
+ DecideResult.CompareWithDealer();
+ }
+
+ }
+ }
main 메서드가 static이기 때문에 다른 메서드들도 대부분 static 으로 작성된 것 같군요!!
이에 관련해서 팁을 드리자면
BlackJackGame이란 객체를 만들고 main 에서는
BlackJackGame blackJackGame = new BlackJaclGame(...)backjackGame.startGame()
을 main에서 호출하는 것으로 변경하면 static method를 줄일 수 있을 겁니다!!
------------------------------
In src/main/java/blackjack/Between16And21.java
<#1 (comment)>:
> @@ -0,0 +1,58 @@
+package blackjack;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Scanner;
+
+public class Between16And21 {
객체지향은 현실에 있을 법한 네이밍을 가진 객체에서 적절한 책임을 분배하는 것이 중요합니다.
그래서 내부에 정의된 메서드들을 Player, Delear라는 객체로 만들고
canReceiveCard 과 같은 메서드들을 통해 대체하도록 만드는 것이 좋아보입니다!
딜러가 카드를 받을 수 있는 규칙을 딜러가 정의한다면 적절한 책임 분배라 볼 수 있겠죠?
—
Reply to this email directly, view it on GitHub
<#1 (review)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BBMA4O6JS3WDCQOWYIFOYRDYRBZMHAVCNFSM6AAAAABCNMEBFSVHI2DSMVQWIX3LMV43YUDVNRWFEZLROVSXG5CSMV3GSZLXHMYTQNJQGE3DAMRXGI>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
1단계의 첫번째 시안입니다. 수정이 필요합니다.