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주차]객체지향 코드 연습(Juuuu-power-e) #11

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

Conversation

Juuuu-power-e
Copy link

추가 Q & A

🤔 잘 모르겠거나, 더 궁금한 내용이 있었나요?

집중적으로 리뷰 받고싶은 것이 있나요?

더 여러종류의 계좌나 은행등이 추가되어도 유지보수가 쉽도록 최대한 확장성을 생각해서 구현해보았는데, 옳은 구조인지 모르겠습니다.

Copy link

@Gopistol Gopistol left a comment

Choose a reason for hiding this comment

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

ENUM으로 메뉴 항목을 관리하는 건 좋은 방법같습니다!
동시성 문제도 고민하셨던 것 같은데 여러 스레드에서 실행될 수 있다고 가정하고 적용해보아도 좋을 것 같습니다.
전체적인 실행 흐름을 관리하는 클래스를 따로 만들어서 적용해보시는 것을 추천드립니다.

return select;
}

}
Copy link

Choose a reason for hiding this comment

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

입출력을 관리하는 클래스를 static으로 전역에서 사용할 수 있게 하셨는데, 이때 메모리 구조상 생길 수 있는 문제점이 있습니다.

static으로 관리하지 않고도 딱 한 번 객체를 생성해서 사용하려면 어떻게 할 수 있을까요?

Copy link
Author

Choose a reason for hiding this comment

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

Main에서 Dialog객체를 생성하여 사용하는 방식과 고민하다가 입출력 클래스가 인스턴스화되는것이 맞는지, 입출력스트림이 닫히지 않도록 스태틱으로 관리하는것이 좋지 않을지 판단해서 스태틱으로 설정했는데 객체화하는것이 좋을까요?

Copy link

Choose a reason for hiding this comment

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

static으로 관리할 경우 해당 클래스가 JVM의 static 영역에 저장되고, 전역으로 접근 가능한 대신 프로그램 종료 시까지 메모리 상에 존재하게 됩니다. 이는 언제 어디서든 접근 가능하다는 장점을 가지고 있지만, GC의 관리를 받지 않아 메모리 측면에서의 문제가 생길 수 있습니다.

Dialog 객체를 인스턴스화하게 되면 해당 변수는 Heap 영역에 저장됩니다. 말씀하신 입출력스트림이 닫힐 만한 시점은, 해당 객체에 대한 모든 참조가 사라지게 될 때 가비지 컬렉터에 의해 소멸되어 닫힐 수 있습니다. 하지만 임의로 해당 Dialog 객체에 대한 참조를 null로 설정하지 않으신다면 입출력 스트림이 닫히는 상황에 대해서는 생각하지 않으셔도 될 것 같습니다!

또한 입출력 클래스 역시 객체지향의 관점에서 '입력, 출력'이라는 역할을 가진 하나의 객체로 생각할 수 있습니다.

그렇기 때문에 인스턴스화하여 사용하는 것이 좋을 것 같습니다!

}else {
Dialog.systemMsg("출금 실패");
}

Copy link

Choose a reason for hiding this comment

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

재사용 가능한 안내 메시지들을 상수 처리하여 enum으로 관리해도 괜찮을 것 같습니다!


private void getAccountInfo() {
Account account = getAccount();
System.out.println(account.getAccountInfo());
Copy link

Choose a reason for hiding this comment

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

입출력 클래스를 사용하는 것이 좋을 것 같습니다!

return true;
}

public boolean checkVerifyNum(String accountNum) {
Copy link

Choose a reason for hiding this comment

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

해당 클래스 안에서만 사용하는 메소드라면 접근 제어자의 단계를 높이는 것이 나을 것 같습니다!

Suggested change
public boolean checkVerifyNum(String accountNum) {
private boolean checkVerifyNum(String accountNum) {

if(balance.compareTo(new BigDecimal(1000000))>=0)
return balance.multiply(new BigDecimal(0.02));
return balance.multiply(new BigDecimal(0.01));

Copy link

Choose a reason for hiding this comment

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

이자율을 뜻하는 숫자는 상수로 관리해도 좋을 것 같습니다!


@Override
public BigDecimal getInterest(BigDecimal balance) {
if(balance.compareTo(new BigDecimal(10000000))>=0)
Copy link

Choose a reason for hiding this comment

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

큰 숫자는 "_"로 구분해서 쓰면 가독성에 좋습니다.

Suggested change
if(balance.compareTo(new BigDecimal(10000000))>=0)
if(balance.compareTo(new BigDecimal(10_000_000))>=0)

bank.run();
bank.payInterest();
bank.run();
}
Copy link

Choose a reason for hiding this comment

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

전체적인 실행 흐름을 Bank 클래스가 관리하고 있는데, 이렇게 되면 Bank의 역할이 너무 커져 추후 수정이 어려워질 수 있습니다. 실행 흐름을 따로 관리하는 역할을 하는 클래스를 만들어서 어떻게 관리할 수 있을까요?

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.

2 participants