νκ·Έ λ¬λ¦° ν΄λμ€λ³΄λ€λ ν΄λμ€ κ³μΈ΅κ΅¬μ‘°λ₯Ό νμ©νλΌ
νκ·Έ λ¬λ¦° ν΄λμ€λ, νλμ ν΄λμ€κ° μ¬λ¬κ°μ§ κΈ°λ₯μ μννλ κ²μ λ§νλ€.
class Figure {
// νκ·Έ νλ - νμ¬ λͺ¨μ μ μ
final Shape shape;
// μ¬κ°ν(RECTANGLE)μΌ λλ§ μ¬μ©νλ νλ
double length;
double width;
// λͺ¨μμ΄ μ(CIRCLE)μΌ λλ§ μ¬μ©νλ νλ
double radius;
// CIRCLE νκ·Έλ₯Ό μν μμ±μ
Figure(double radius) {
shape = Shape.CIRCLE;
this.radius = radius;
}
// RECTANGLE νκ·Έλ₯Ό μν μμ±μ
Figure(double length, double width) {
shape = Shape.RECTANGLE;
this.length = length;
this.width = width;
}
double area() {
switch (shape) {
case RECTANGLE:
return length * width;
case CIRCLE:
return Math.PI * (radius * radius);
default:
throw new AssertionError(shape);
}
}
enum Shape {RECTANGLE, CIRCLE}
}
μ μ½λλ₯Ό 보면 νλμ ν΄λμ€κ° νκ·Έ νλμ λ°λΌ μ¬λ¬κ°μ§ κΈ°λ₯μ μννκ³ μμΌλ©°, λΆνμν μ½λκ° λ§μ λ©λͺ¨λ¦¬ λλΉμ κ°λ
μ±μ΄ λ¨μ΄μ§λ€.
μμ²λΌ νκ·Έ νλλ₯Ό μ¬μ©νλ κ²μ΄ μλλΌ κ³μΈ΅ ꡬ쑰λ₯Ό νμ©νλ μλΈνμ΄νμ μ¬μ©νλ©΄ λ λμ μ½λλ₯Ό μμ±ν μ μλ€.
abstract class Figure {
abstract double area();
}
class Circle extends Figure {
final double radius;
Circle(double radius) {
this.radius = radius;
}
@Override
double area() {
return Math.PI * (radius * radius);
}
}
class Rectangle extends Figure {
final double length;
final double width;
Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
double area() {
return length * width;
}
}
κΈ°μ‘΄ μ½λμ λΉκ΅ν΄λ³΄λ©΄ μΈκΈλ λ¨μ μ΄ λͺ¨λ ν΄κ²°λμμμ μ μ μλ€.
λν νμ₯μ± λ©΄μμ, μλ‘μ΄ λͺ¨μμ΄ μΆκ°λλλΌλ κΈ°μ‘΄ μ½λλ₯Ό 건λ릴 νμκ° μλ€.