다형성 동작
다형성을 사용해 여러 도형을 출력하고 정렬하며 집계합니다. 모바일에서 읽기 쉽도록 알고리즘을 작고 간단하게 유지합니다.
다형성 동작은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.