0Pricing
Java Academy · 강의

다형성 동작

다형성을 사용해 여러 도형을 출력하고 정렬하며 집계합니다. 모바일에서 읽기 쉽도록 알고리즘을 작고 간단하게 유지합니다.

다형성 동작은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

개요

다형성 동작을 사용하면 모든 도형을 같은 방식으로 다루면서도 각 도형이 자체 계산을 수행하게 할 수 있습니다. 다음을 진행합니다: (1) 여러 도형이 섞인 목록을 일관되게 출력하기, (2) area를 기준으로 정렬하기, (3) 하나의 반복문으로 합계 계산하기.

기반 인터페이스 점검표

기반 인터페이스에는 어디에서나 사용하는 동작을 둡니다:

  • area()와 perimeter() — 각 도형이 구현해야 합니다.
  • 깔끔한 출력을 위한 label() 또는 info() 같은 작은 선택적 보조 메서드입니다.
  • 필드는 구체 도형 내부에 둡니다.

코드: 일관된 출력

일관된 출력: 반복문은 Shape의 공통 인터페이스만 사용합니다. 각 객체가 계산을 위해 자체 구현을 실행합니다.

public class Main {
  static abstract class Shape {
    abstract double area();
    abstract double perimeter();
    String label() { return getClass().getSimpleName(); }
    String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
  }
  static class Circle extends Shape {
    double r; Circle(double r) { this.r = (r < 0) ? 0 : r; }
    double area() { return Math.PI * r * r; }
    double perimeter() { return 2 * Math.PI * r; }
  }
  static class Rectangle extends Shape {
    double w, h; Rectangle(double w, double h) { this.w = Math.max(0, w); this.h = Math.max(0, h); }
    double area() { return w * h; }
    double perimeter() { return 2 * (w + h); }
  }
  public static void main(String[] args) {
    Shape[] list = { new Circle(2.0), new Rectangle(3.0, 4.0), new Circle(1.0) };
    for (int i = 0; i < list.length; i = i + 1) {
      Shape s = list[i];
      System.out.println(s.label() + " -> " + s.info());
    }
  }
}

면적 기준 정렬 (개념)

정렬 아이디어:

  • 비교: 두 도형의 area() 값을 비교합니다.
  • 작은 데이터에는 간단한 버블/선택 정렬이면 충분합니다.
  • Shape 메서드만 사용하고 유형 확인은 하지 않습니다.

코드: 면적 기준 정렬

간단한 정렬에는 area() 호출만 필요합니다. 유형 확인이 없다는 점이 다형성의 힘입니다.

public class Main {
  static abstract class Shape { abstract double area(); abstract double perimeter(); String label(){ return getClass().getSimpleName(); } }
  static class Circle extends Shape { double r; Circle(double r){ this.r = Math.max(0, r);} double area(){return Math.PI*r*r;} double perimeter(){return 2*Math.PI*r;} }
  static class Rectangle extends Shape { double w,h; Rectangle(double w,double h){ this.w=Math.max(0,w); this.h=Math.max(0,h);} double area(){return w*h;} double perimeter(){return 2*(w+h);} }

  // Very small bubble sort for beginners (ascending by area)
  static void sortByArea(Shape[] arr){
    for(int pass=0; pass<arr.length-1; pass=pass+1){
      for(int i=0; i<arr.length-1; i=i+1){
        if(arr[i].area() > arr[i+1].area()){
          Shape tmp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tmp;
        }
      }
    }
  }

  public static void main(String[] args) {
    Shape[] a = { new Rectangle(3,4), new Circle(2), new Circle(1) };
    sortByArea(a);
    for(int i=0;i<a.length;i=i+1){
      System.out.println(a[i].label() + " area=" + String.format("%.2f", a[i].area()));
    }
  }
}

코드: 전체 면적

합계 계산: 하나의 반복문에서 area() 호출 결과를 합산합니다. 각 요소가 자체 계산을 수행하므로 코드가 간단하게 유지됩니다.

public class Main {
  static abstract class Shape { abstract double area(); abstract double perimeter(); }
  static class Circle extends Shape { double r; Circle(double r){ this.r=Math.max(0,r);} double area(){return Math.PI*r*r;} double perimeter(){return 2*Math.PI*r;} }
  static class Rectangle extends Shape { double w,h; Rectangle(double w,double h){ this.w=Math.max(0,w); this.h=Math.max(0,h);} double area(){return w*h;} double perimeter(){return 2*(w+h);} }

  static double totalArea(Shape[] arr){
    double sum = 0.0;
    for(int i=0;i<arr.length;i=i+1){
      sum = sum + arr[i].area(); // polymorphic call
    }
    return sum;
  }

  public static void main(String[] args) {
    Shape[] list = { new Circle(1), new Rectangle(2,3), new Circle(0.5) };
    System.out.println("Total area = " + String.format("%.2f", totalArea(list)));
  }
}

다형성 방식 확인

빠른 확인: 여기에서 다형성을 가장 잘 활용하는 코드 방식은 무엇인가요?

복습

복습: 동일한 인터페이스를 사용해 작성하고 각 도형이 자체 결과를 만들도록 했습니다. 출력, 정렬, 합계와 같은 작업이 하나의 공통 코드로 작동했습니다.

자주 묻는 질문

“다형성 동작” 강의는 무료인가요?

네 — “다형성 동작” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

“다형성 동작”에서 뭘 배우나요?

다형성을 사용해 여러 도형을 출력하고 정렬하며 집계합니다. 모바일에서 읽기 쉽도록 알고리즘을 작고 간단하게 유지합니다. 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.

“다형성 동작” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 설계
  2. 구현
  3. 다형성 동작
← Java Academy(으)로 돌아가기