작성
·
191
0
[질문 내용]
질문1)
public class RectangleOopMain {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
rectangle.width = 5;
rectangle.height = 8;
rectangle.print();
}
}
public class Rectangle {
int width;
int height;
void print(){
int area = calculateArea();
System.out.println("넓이: " + area);
int perimeter = calculatePerimeter();
System.out.println("둘레 길이: " + perimeter);
boolean square = isSquare();
System.out.println("정사각형 여부: " + square);
}
int calculateArea() {
return width * height;
}
int calculatePerimeter() {
return 2 * (width + height);
}
boolean isSquare() {
return width == height;
}
Main에 있는 출력을 클래스로 빼서 풀었는데
이렇게 풀어도 되는지, 비효율적인지 궁금합니다.
질문2)
public class Account {
int balance;
void deposit(int amount){
balance += amount;
}
void withdraw(int amount){
if (balance >= amount){
balance -= amount;
}else if (balance < amount){
System.out.println("잔액 부족");
}
}
}
Account 문제에서 void deposit 과 void withdraw 클래서에서 return balance를 하지 않아도 되는 이유가 궁금합니다.
답변 2
1
안녕하세요. SEUIL님, 공식 서포터즈 y2gcoder입니다.
질문 1) 클래스 안에 넣어서 풀어도 됩니다! 다만 다음 링크(클릭)에서 언급하는 것과 같이 객체 지향 프로그래밍적인 관점에서 메서드 간의 책임(변경할 이유)는 적으면 적을 수록 좋고 메서드 이름이 calculateArea(), calculatePerimeter(), isSquare() 라면 해당 기능만 있고, 출력 기능은 따로 두는 편이 유지보수하기 좋습니다!
질문 2) 현재 문제에서 deposit 후, withdraw 후의 잔고를 반환받아 바로 사용할 필요가 없기 때문입니다. 잔고는 문제에서도 보이듯이 원할 때 account.balance를 통해서 받아서 사용할 수 있기 때문에 해당 문제에서는 따로 추가하지 않았다고 봐주시면 될 것 같습니다. 만약 요구사항에서 입금 후 잔액, 출금 후 잔액을 바로 표시해줘야 한다는 요구사항이 발생했을 때는 경우에 따라 계산 후의 잔고를 리턴하게끔 해서 활용할 수 있을 것 같습니다 :)
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
질문 내용에 대한 유사한 내용을 다룬 강의 질문&답변 내용을 찾아본 결과, 정확히 동일한 문제에 대한 질문은 없지만 객체지향 프로그래밍과 관련된 클래스의 메서드 구현 및 클래스 설계에 대한 질문이므로, 이와 관련된 강의 자료로 도움을 받으실 수 있을 것 같습니다.
질문 1) 에 대해서는 클래스 내에 메서드로 기능을 분리하는 것이 객체지향 프로그래밍의 중요한 개념 중 하나이며, 멤버 변수와 관련한 메서드를 클래스 내부에 구현하는 것은 일반적으로 좋은 설계 방식입니다. 여러 연산을 클래스 내부에서 처리하게 함으로써 캡슐화를 강화하고, 재사용성을 높일 수 있습니다.
질문 2) 에 대해서는 메서드가 값을 반환하지 않는 void
타입의 경우 클래스 내부의 멤버 변수를 직접 수정하는 역할을 수행합니다. deposit
과 withdraw
메서드는 계좌의 잔액을 변경하는 역할을 하며, 변경된 잔액은 클래스의 멤버 변수 balance
에 저장되므로 별도의 반환 값이 없어도 됩니다.
아래는 강의 Q&A에서 비슷한 주제를 다룬 질문과 대답의 링크입니다. 참고하시어 궁금증을 해결하는 데 도움이 되시길 바랍니다.
더 자세한 설명이나 다른 궁금증이 있다면, 위 링크를 통해 인프런 내 해당 강의의 Q&A 섹션에서 질문을 남겨보시길 권장드립니다.
답변 감사합니다