Skip to content
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

[2주차] 방현우 객체지향 코드 연습(baaamk) #33

Open
wants to merge 22 commits into
base: main
Choose a base branch
from

Conversation

baaamk
Copy link

@baaamk baaamk commented Sep 30, 2024

객체 지향을 위해서 역할 분리를 하는 중에 계속 애를 먹어 진행을 많이 하지 못했습니다.
앞으로 더 채워나가겠습니다.

Copy link
Contributor

@KoSeonJe KoSeonJe left a comment

Choose a reason for hiding this comment

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

요구사항에 어떤 책임이 있는지 먼저 분리하고, 그 책임을 맡을 객체를 생성해보는 것이 좋습니다.

그리고 로직을 먼저 구현하는 것보다, 메시지(메소드)를 먼저 작성하고 그 메소드 내에 필요한 로직을 구현하는 것이 더 쉽게 작성하실 수 있습니다.

src/main/java/lotto/Lotto.java Outdated Show resolved Hide resolved
src/main/java/lotto/Application.java Outdated Show resolved Hide resolved
Copy link
Member

@Hoya324 Hoya324 left a comment

Choose a reason for hiding this comment

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

수고하셨어요! 아래의 리뷰를 참고해서 꼭 어떤 방식으로 코드를 나눌 수 있을지 고민해보시면 좋을 것 같습니다.
만약 어려우시다면 우선 메서드 단위로 쭉 나누어 보셔요! 그럼 각각의 기능이 눈으로 보일거고 각 메서드를 어떤 객체가 가지는게 좋을지를 고민하시다보면 각각 객체의 역할을 지정하기 쉬우실겁니다!
10/10까지 시간이 많이 있으니 기대하고 있겠습니다ㅎㅎㅎ

src/main/java/lotto/Application.java Outdated Show resolved Hide resolved
src/main/java/lotto/Application.java Outdated Show resolved Hide resolved
baaamk added 5 commits October 1, 2024 21:47
TODO: 기능별로 역할 분리 필요
TODO: 기능별로 더 자세한 역할 분리 필요
feat:로또 번호 비교 기능, enum활용

TODO: 요구사항 라이브러리 사용해야 함.예외 구사애햐 함.
feat:로또 번호 비교 기능, enum활용

TODO: 요구사항 라이브러리 사용해야 함.예외 구사애햐 함.
TODO: 요구사항 라이브러리 사용해야 함.예외 구사애햐 함.
Copy link
Member

@Hoya324 Hoya324 left a comment

Choose a reason for hiding this comment

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

전반적으로 객체를 잘 나누기 시작한게 보입니다..! 성장 속도가 말도 안 되시네요..

다만 객체를 나눌 때의 디테일이 아쉬운게 몇 보여서 리뷰를 남겨두었습니다. 확인해보세요!
매직넘버로 꼭 모두 수정해주시면 감사하겠습니다ㅎㅎㅎ

그리고 주석은 최소한으로 하시는게 좋습니다. 만약 공부용으로 남겨두고 싶으신거라면
// study log: ~
이런식으로 작성 부탁드립니다!

너무너무 수고하셨고 혹시 리뷰가 잘 이해가 안 된다면 말씀해주세요!

src/main/java/lottoController/LottoService.java Outdated Show resolved Hide resolved
src/main/java/lottoController/LottoService.java Outdated Show resolved Hide resolved
package lottoModel;

import java.util.*;
//외부에서 들어온 숫자가 맞나만 관리하면 된다.
Copy link
Member

Choose a reason for hiding this comment

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

이걸 풀어서 생각해보면 "로또는 번호에 대한 판단의 역할을 가진다. 외부에서는 숫자만 받는다" 로 볼 수 있을것 같은데
역할과 협력관계를 생각했다고 볼 수 있을것 같습니다!

벌써부터 성장을.. 엄청나십니다!!
다만 이 주석도 이젠 필요없을테니 주석은 지워주세용!

src/main/java/lottoModel/Lotto.java Outdated Show resolved Hide resolved
public class LottoComparison {

public void lottoComparison(Lotto userLotto, int bonusNum) {
Iterator<List<Integer>> lottoList = lottoSavedLooping();
Copy link
Member

Choose a reason for hiding this comment

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

혹시 Iterator을 쓰게 된 계기는 무엇일까요?

Copy link
Author

Choose a reason for hiding this comment

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

모든 로또를 확인하면서 유저가 생성한 로또랑 맞는지 구분해야 하는데, 이걸 자바에 있는 라이브러리를 활용하면 깔끔하게 코드를 만들 수 있어 사용하게 되었습니다.

Copy link
Member

Choose a reason for hiding this comment

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

Iterator을 사용하면 컬렉션(리스트) 인스턴스를 관리하기 용이하니 좋은 선택인거 같아요

Iterator 외에도 Collection의 값을 비교하는 방식에는 여러 방법이 있다는 것만 인지해주시면 더 좋을 것 같습니다. Iterator도 그 중 하나의 방법인고, stream 등 여러 방식을 고민해보셔도 좋을 것 같습니다!

src/main/java/lottoModel/LottoComparison.java Outdated Show resolved Hide resolved
src/main/java/lottoModel/LottoMaker.java Outdated Show resolved Hide resolved
@@ -0,0 +1,33 @@
package lottoController;
Copy link
Member

Choose a reason for hiding this comment

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

패키지에 대한 고민도 해보시면 좋을 것 같아요!
lottoController 안에 LottoService가 들어가는게 맞는걸까?
동료 개발자에 나의 코드를 보고 로또가 동장하는 것을 보고싶은데 직관적으로 lottoController를 들어올까? 라는 고민으로 시작해보시면 좋을 것 같습니다!

Copy link
Author

@baaamk baaamk Oct 2, 2024

Choose a reason for hiding this comment

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

이 리뷰가 잘 이해가 안됩니다ㅠㅠ 조금만 구체적으로 말씀 부탁드려요..

Copy link
Contributor

Choose a reason for hiding this comment

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

LottoController라는 모듈(패키지) 안에서 Service라는 이름의 클래스가 존재하는 게 맞는지 한번 생각해보시는 게 좋을 것 같다고 얘기하는 것 같아요

보통, Service라는 이름은 비즈니스 로직과 관련된 코드를 작성할 때 사용합니다. 적절하지 않은 것 같아요.

baaamk added 4 commits October 2, 2024 16:39
feat: OutputMessage Enum으로 구현, LottoOutput 각각의 출력 메서드 생성

TODO: 요구사항 라이브러리 사용해야 함.예외 구사애햐 함.
TODO:예외 구사애햐 함.
feat: 각 예외 구사,

TODO: 예외를 한 클래스에서 관리
Copy link
Contributor

@KoSeonJe KoSeonJe left a comment

Choose a reason for hiding this comment

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

고생하셨습니다.

전체적으로 코드 컨벤션을 좀더 신경 써주시면 좋을 것 같고, 객체의 분리는 잘 해주신 것 같은나, 객체에 맞는 책임이 적절하게 주어진 것 같진 않습니다.

피드백을 적극적으로 반영해주시길 바랍니다.
그리고, 패키지명은 컨벤션에 따르면 단어 하나를 사용하는 것을 지향하며, 대문자를 사용하지 않는 것이 원칙입니다. 수정해주세요

src/main/java/Application.java Outdated Show resolved Hide resolved
@@ -0,0 +1,33 @@
package lottoController;
Copy link
Contributor

Choose a reason for hiding this comment

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

LottoController라는 모듈(패키지) 안에서 Service라는 이름의 클래스가 존재하는 게 맞는지 한번 생각해보시는 게 좋을 것 같다고 얘기하는 것 같아요

보통, Service라는 이름은 비즈니스 로직과 관련된 코드를 작성할 때 사용합니다. 적절하지 않은 것 같아요.

src/main/java/Application.java Outdated Show resolved Hide resolved
Comment on lines 9 to 11
private final String errorCode;

ErrorCode(String errorCode) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Enum의 생성자를 Default로 설정해주셨는데, 어떤 접근제어자가 Default로 되어있을까요?

Copy link
Author

Choose a reason for hiding this comment

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

Enum의 생성자는 자동으로 private로 부여되는 것으로 알고있어서 이렇게 했습니다!! private로 명시해줘야 될까요??

Copy link
Contributor

Choose a reason for hiding this comment

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

아뇨 그냥 알고계신지 확인 한 것입니다! 좋습니다~~

src/main/java/exception/ErrorCode.java Outdated Show resolved Hide resolved
src/main/java/lottoView/LottoOutput.java Outdated Show resolved Hide resolved
src/main/java/lottoView/LottoOutput.java Outdated Show resolved Hide resolved
int unitMoney = 1000;
int amount = inputMoney / unitMoney;
System.out.println(String.format(AMOUNT_OUTPUT.getMessage(), amount));
LottoMaker.generate(amount);
Copy link
Contributor

Choose a reason for hiding this comment

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

출력을 담당하는 객체의 메소드에서 Lotto를 만들어내는 것은 적절하지 않은 것 같습니다.

src/main/java/lottoView/LottoOutput.java Outdated Show resolved Hide resolved
src/main/java/lottoView/LottoOutput.java Outdated Show resolved Hide resolved
baaamk added 2 commits October 8, 2024 02:16
feat: LottoRepository 싱글톤으로 관리.

TODO: Stream으로 LottoComparator 관리하기, SetQuantity 사용하지 않기.
TODO: Stream으로 LottoComparator 관리하기, SetQuantity 사용하지 않기.
Copy link
Member

@Hoya324 Hoya324 left a comment

Choose a reason for hiding this comment

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

정말 SOLID의 원칙까지 지킨 엄청나게 좋아진 코드이네요!!

AppConfig를 통해 IoC(제어의 역전)을 구현하고, DI한 모습이 인상적입니다.
이제는 인터페이스를 사용하지 않아 AppConfig에서 OCP과 DIP가 지켜지지 않고 있습니다.
이를 해결하기 위해 interface를 적용해보세요!

또한 폴더 구조에 대해 조금더 고민해보시길 바랍니다.! 수고하셨어요!

@0702Yoon
Copy link

0702Yoon commented Oct 9, 2024

코드를 짜시느라 고생 많으셨습니다.
AppConfig를 만드셨는 데 저는 이것의 가장 큰 의미가 클래스가 자신이 사용하는 다른 클래스, 즉 의존하는 클래스의 객체들이 바뀌든 말든
신경 안쓰고 그 클래스의 역할을 완수하게 하기 위함으로 생각해요. 하지만 AppConfig에서 이렇게 구현체를 반환하게 하면, 구현체가 바뀌었을 때 기존 클래스에 영향이 갈수밖에 없어요. 인터페이스란 친구를 한번 보시는 거 추천드립니다.

LottoRank의 enum을 이렇게 사용하셔서 굉장히 흥미로웠습니다. 이것 덕분에 controller가 굉장히 단순해졌다? 근데 한편으로는 당첨된 횟수를 이렇게 상수로 관리해도 괜찮을까..? 들어나도 괜찮나 라는 생각을 합니다.
또 이걸로 등수를 체크하는 로직도 흥미로웠습니다.

앞썬 멘토들의 피드백을 잘 반영했으면 좋겠어요. 고생하셨습니다

Copy link
Member

@Hoya324 Hoya324 left a comment

Choose a reason for hiding this comment

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

와 가볍게 봤는데 DIP, OCP를 지키기 위해 interface 적용하신거 진짜 좋네요! 수고하셨습니다

@baaamk
Copy link
Author

baaamk commented Oct 10, 2024

lotto 클래스 조직도

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.

4 participants