inflearn logo
강의

Course

Instructor

Solid Foundation! Java Starting Strongly - Part 2: OOP and JVM

[Lab] Shape Class

Shape 클래스 실습 코드 피드백 요청드립니다

Resolved

40

ice28

2 asked

0

안녕하세요, 강사님.

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();
    }
}

java 객체지향 jvm data-structure

Answer 2

1

nullnull8537

배운 내용을 잘 활용하셨네요. 코드도 깔끔하고요. 잘 하셨습니다. 현재 학습단계에서는 딱히 지적할 내용은 없습니다. 잘 하셨습니다. :)

1

ice28

감사합니다 :) 계속 로드맵 열심히 따라가겠습니다!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. ice28님.

먼저, 제공해주신 Shape 클래스 구조를 리뷰하게 되어 기쁩니다. 코드를 보며 몇 가지 코멘트를 드리겠습니다:

  1. 기본 생성자 및 오버로딩: 자식 클래스인 RectangleTriangle에서 기본 크기 상수를 설정하여 기본 생성자를 제공합니다. 이는 확장성과 유지보수에 좋은 방식입니다. 필요시 다른 크기의 도형을 생성할 수 있도록 크기를 인자로 받는 생성자도 제공하고 있어 유연합니다.

  2. 코드 구조 및 가독성: 각 클래스의 역할이 명확하게 정의되어 있습니다. 주석을 통해 클래스와 메서드의 역할을 잘 설명해주셔서 이해하기 쉽습니다.

  3. 설계의 유연성: Shape 클래스는 size 변수로 도형의 기본 크기를 관리하며, 자식 클래스에서 필요에 따라 기본 크기를 설정할 수 있어 확장성이 좋습니다.

  4. 추가 고려사항:

    • 다형성 활용: 문자 출력 대신 그래픽적으로 도형을 그리거나 또 다른 방식으로 도형을 다뤄보는 기능을 추가해 보면 객체지향적 프로그래밍에서 다형성을 더 잘 이해할 수 있을 것입니다.
    • 예외 처리: 사용자가 크기를 입력할 때 예외 상황에 대한 처리를 추가하면 프로그램이 더욱 견고해질 수 있습니다.
  5. 추가적으로 참고할 수 있는 자료:

    • 인터페이스와 추상 클래스를 활용한 디자인 패턴 및 예제를 좀 더 살펴보시면 설계에 대한 관점이 좀 더 넓어질 수 있습니다.
    • 아래 링크에서는 유사한 주제를 다루고 있으며, 다양한 질문과 답변이 있어 도움이 될 것입니다:

현재 코드 구조는 이미 훌륭하게 잘 작성되었기에 위에서 언급한 추가적인 내용을 고려하시면 더욱 심도 있는 학습이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

compareTo를 사용하는 이유가 뭔가요?

0

100

2

[실습] MyString에 복사 생성자 추가

0

96

2

안녕하세요~ 회수라는 의미에 대해서 질문합니다.

0

117

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