Menu
Coddy logo textTech

요약 - 도형 계산기

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 33번째.

challenge icon

챌린지

쉬움

이 장에서 배운 모든 다형성 개념을 하나로 모으는 도형 계산기를 만들어 보겠습니다. 추상 클래스인 Shape와 이를 상속받는 구체적인 서브클래스들을 생성한 다음, 다형성을 사용하여 면적을 계산하고 일관되게 표시할 것입니다.

코드는 다음 네 개의 파일로 구성됩니다:

  • Shape.java: 모든 도형의 기초가 되는 추상 클래스를 생성합니다. 모든 도형은 name 필드(String)를 가집니다. 이를 초기화하는 생성자, 게터 메서드인 getName(), 그리고 double을 반환하는 추상 메서드 getArea()를 포함하세요. 또한 [name]: [area]를 반환하는 describe() 메서드를 추가하세요 (여기서 area는 String.format("%.2f", getArea())를 사용하여 소수점 둘째 자리까지 포맷팅되어야 합니다).
  • Circle.java: Shape를 상속받는 구체 클래스를 생성합니다. 원은 radius 필드(double)를 가집니다. super를 사용하여 "Circle"을 이름으로 전달하세요. Math.PI * radius * radius를 사용하여 면적을 반환하도록 getArea()를 구현하세요.
  • Rectangle.java: Shape를 상속받는 또 다른 구체 클래스를 생성합니다. 사각형은 widthheight 필드(둘 다 double)를 가집니다. 부모 생성자에 "Rectangle"을 이름으로 전달하세요. 너비와 높이를 곱한 값을 반환하도록 getArea()를 구현하세요.
  • Main.java: 다형성이 실제로 작동하는 모습을 보여주는 도형 계산기를 빌드합니다. 원의 반지름, 사각형의 너비와 높이 등 세 개의 입력을 받게 됩니다.

    Circle과 Rectangle을 생성한 다음, 이들을 Shape 참조 배열에 저장하세요. 배열을 루프하며 각 도형에 대해 describe() 메서드를 사용하여 설명을 출력하세요.

    루프가 끝난 후, 모든 도형의 총 면적을 Total area: [sum] 형식으로 계산하여 출력하세요 (이 또한 소수점 둘째 자리까지 포맷팅되어야 합니다). 별도의 루프나 누산기를 사용하여 각 도형 참조에서 getArea()를 호출해 면적의 합계를 구하세요.

세 개의 입력을 받습니다: 원의 반지름(double), 사각형의 너비(double), 사각형의 높이(double).

출력은 세 줄로 표시되어야 합니다 - 각 도형에 대한 설명 한 줄씩과 그 뒤에 이어지는 총 면적입니다. 각 도형이 자신만의 방식으로 면적을 계산하는 동안, 추상 타입인 Shape를 통해 서로 다른 도형들을 어떻게 일관되게 다룰 수 있는지 확인해 보세요!

직접 해보기

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 입력 읽기
        double radius = scanner.nextDouble();
        double width = scanner.nextDouble();
        double height = scanner.nextDouble();
        
        // TODO: radius를 사용하여 Circle 객체 생성
        
        // TODO: width와 height를 사용하여 Rectangle 객체 생성
        
        // TODO: Shape 참조 배열을 생성하고 두 도형을 모두 저장
        
        // TODO: 배열을 순회하며 describe()를 사용하여 각 도형의 설명을 출력
        
        // TODO: 모든 도형의 전체 면적 계산
        // 루프나 누산기를 사용하여 각 도형의 getArea()를 호출해 면적 합산
        
        // TODO: "Total area: [sum]" 형식으로 전체 면적 출력
        // 포맷팅을 위해 String.format("%.2f", totalArea) 사용
    }
}

객체 지향 프로그래밍의 모든 레슨