Shape 클래스 실습 코드 피드백 요청드립니다
안녕하세요, 강사님.
Shape 클래스 실습을 진행한 결과물을 공유드립니다.
실습 내용을 바탕으로 도형의 크기를 부모 클래스에서 관리하고, 각 자식 클래스에서 기본 크기를 지정할 수 있도록 생성자를 구성해 보았습니다.
시간 괜찮으실 때 구현 방향에서 어색한 부분이나 개선하면 좋을 점이 있는지 간단히 봐주시면 감사하겠습니다.
또한 이번 실습에서 추가로 생각해 보면 좋을 내용이 있다면 함께 알려주시면 감사하겠습니다.
감사합니다.
package java2_30;
import java.util.Scanner;
/**
* 화면에 출력할 수 있는 도형의 공통 부모 클래스입니다.
*
* 현재 실습에서는 삼각형과 정사각형만 다루므로,
* 가로와 세로를 구분하지 않고 하나의 size 값으로 크기를 관리합니다.
*/
abstract class Shape {
private final int size;
protected Shape(int size) {
this.size = size;
}
protected final int getSize() {
return size;
}
/**
* 각 도형의 모양을 콘솔에 출력합니다.
*/
abstract void render();
}
class Rectangle extends Shape {
private static final int DEFAULT_SIZE = 4;
public Rectangle() {
this(DEFAULT_SIZE);
}
public Rectangle(int size) {
super(size);
}
@Override
public void render() {
for (int i = 0; i < getSize(); i++) {
for (int j = 0; j < getSize(); j++) {
System.out.print("*\t");
}
System.out.println();
}
}
}
class Triangle extends Shape {
private static final int DEFAULT_SIZE = 5;
public Triangle() {
this(DEFAULT_SIZE);
}
public Triangle(int size) {
super(size);
}
@Override
public void render() {
for (int i = 0; i < getSize(); i++) {
for (int j = 0; j <= i; j++) {
System.out.print("*\t");
}
System.out.println();
}
}
}
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("사각형은 0, 삼각형은 그 외 숫자를 입력하세요: ");
int input = scanner.nextInt();
Shape shape;
if (input == 0) {
shape = new Rectangle();
} else {
shape = new Triangle();
}
shape.render();
scanner.close();
}
}
답변 2
1
배운 내용을 잘 활용하셨네요. 코드도 깔끔하고요. 잘 하셨습니다. 현재 학습단계에서는 딱히 지적할 내용은 없습니다. 잘 하셨습니다. :)
0
안녕하세요, 인프런 AI 인턴입니다. ice28님.
먼저, 제공해주신 Shape 클래스 구조를 리뷰하게 되어 기쁩니다. 코드를 보며 몇 가지 코멘트를 드리겠습니다:
기본 생성자 및 오버로딩: 자식 클래스인
Rectangle와Triangle에서 기본 크기 상수를 설정하여 기본 생성자를 제공합니다. 이는 확장성과 유지보수에 좋은 방식입니다. 필요시 다른 크기의 도형을 생성할 수 있도록 크기를 인자로 받는 생성자도 제공하고 있어 유연합니다.코드 구조 및 가독성: 각 클래스의 역할이 명확하게 정의되어 있습니다. 주석을 통해 클래스와 메서드의 역할을 잘 설명해주셔서 이해하기 쉽습니다.
설계의 유연성:
Shape클래스는size변수로 도형의 기본 크기를 관리하며, 자식 클래스에서 필요에 따라 기본 크기를 설정할 수 있어 확장성이 좋습니다.추가 고려사항:
- 다형성 활용: 문자 출력 대신 그래픽적으로 도형을 그리거나 또 다른 방식으로 도형을 다뤄보는 기능을 추가해 보면 객체지향적 프로그래밍에서 다형성을 더 잘 이해할 수 있을 것입니다.
- 예외 처리: 사용자가 크기를 입력할 때 예외 상황에 대한 처리를 추가하면 프로그램이 더욱 견고해질 수 있습니다.
- 다형성 활용: 문자 출력 대신 그래픽적으로 도형을 그리거나 또 다른 방식으로 도형을 다뤄보는 기능을 추가해 보면 객체지향적 프로그래밍에서 다형성을 더 잘 이해할 수 있을 것입니다.
추가적으로 참고할 수 있는 자료:
- 인터페이스와 추상 클래스를 활용한 디자인 패턴 및 예제를 좀 더 살펴보시면 설계에 대한 관점이 좀 더 넓어질 수 있습니다.
- 아래 링크에서는 유사한 주제를 다루고 있으며, 다양한 질문과 답변이 있어 도움이 될 것입니다:
- 인터페이스와 추상 클래스를 활용한 디자인 패턴 및 예제를 좀 더 살펴보시면 설계에 대한 관점이 좀 더 넓어질 수 있습니다.
현재 코드 구조는 이미 훌륭하게 잘 작성되었기에 위에서 언급한 추가적인 내용을 고려하시면 더욱 심도 있는 학습이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
compareTo를 사용하는 이유가 뭔가요?
0
100
2
[실습] MyString에 복사 생성자 추가
0
96
2
안녕하세요~ 회수라는 의미에 대해서 질문합니다.
0
116
1
equals의 재정의(overriding)에 대해서
0
127
2
TestEx 객체 생성 시 생성자 호출 질문
0
101
2
[MyString 실습 인스턴스 중복 생성 문의] MyString.setString(String param)
1
136
2
주소록 실습 3단계에서 막혔어서 조언을 구하려고 질문 드립니다.
0
120
2
해시 알고리즘 관련으로 질문이 있습니다.
0
103
2
21분 경 Old generation의 GC 설명 질문입니다.
0
135
3
임시 객체의 첫 번째 상황에 대한 질문
0
106
2
String 객체가 하나 더 생성되는 이유가 궁금합니다
0
231
3
하위 클래스와 상위 클래스의 생성자 순서
0
136
2
GC의 age와 관련하여 질문 있습니다.
0
126
2
Object Header 의 Klass word (39강 36:00)
0
153
2
method area는 이름이 class area가 아니고 왜 method aread인지 궁금합니다.
0
171
2
교안 p.305 'throw 필수' 질문
0
105
1
Metaspace에 대한 질문
1
303
2
clone() 메서드를 재정의함으로써 Deep copy로 구현한다로 이해하면 될까요?
0
160
2
MyListEx 질문드립니다.
1
157
1
part3 강의 개강
0
224
2
문자열 비교 강좌에서 문자열 선언 방법 간에 hashCode() 값 관련한 질문입니다.
0
246
2
상속과 오지랖의 콜라보 예제에서 clone() 메서드에 대한 문의드립니다.
1
208
2
보이지 않는 임시 객체의 자막 수정 요청
0
136
2
스레드 관련해서 질문이 있습니다.
0
216
1





