νκ·Έ λ¬λ¦° ν΄λμ€λ³΄λ€λ ν΄λμ€ κ³μΈ΅κ΅¬μ‘°λ₯Ό νμ©
νλμ ν΄λμ€κ° λ κ°μ§ μ΄μμ μλ―Έλ₯Ό ννν μ μμΌλ©°, κ·Έ μ€ νμ¬ νννλ μλ―Έλ₯Ό νκ·Έ
κ°μΌλ‘ μλ €μ£Όλ ν΄λμ€
κ° μλ―Έλ₯Ό νννκΈ° μν νλλ₯Ό λͺ¨λ μμ νκ³ , νκ·Έ νλλ₯Ό μμ ν΄μΌ ν¨
μμ - λ€μν λνμ ννν μ μλ Figure ν΄λμ€
class Figure {
enum Shape { RECTANGLE , CIRCLE };
final Shape shape ; // νκ·Έ νλ
// shapeκ° μ¬κ°νμΌ λλ₯Ό μν νλ
double length ;
double width ;
// shapeκ° μμΌ λλ₯Ό μν νλ
double radius ;
Figure (double length , double width ) {
shape = Shape .RECTANGLE ;
this .length = length ;
this .width = width ;
}
Figure (double radius ) {
shape = Shape .CIRCLE ;
this .radius = radius ;
}
double area () {
return switch (shape ) {
case RECTANGLE -> length * width ;
case CIRCLE -> Math .PI * radius * radius ;
};
}
}
νκ·Έ λ¬λ¦° ν΄λμ€μ λ¬Έμ μ
μΌλ¨ SRP μλ°
νλμ μλ―Έ λ΄ μμ μ΄ μΌμ΄λλ©΄ μ 체 ν΄λμ€μ μν₯μ λ―ΈμΉ¨
νλμ μλ―Έλ₯Ό μ¬μ©νκΈ° μν΄ ν΄λΉ μλ―Έμ μ¬μ©λμ§ μλ νλλ€κΉμ§ μ΄κΈ°νλ¨
μ μλ―Έλ₯Ό μΆκ°νλ©΄ λ©μλ λ΄ λͺ¨λ switch λ¬Έμ μμ ν΄μ€μΌ ν¨
λΉν¨μ¨μ μ΄κ³ , μ€λ₯λ₯Ό λ΄κΈ° μ¬μ°λ©°, κ°λ
μ±λ μμ’μ
νκ·Έ λ¬λ¦° ν΄λμ€ λμ ν΄λμ€ κ³μΈ΅κ΅¬μ‘°λ₯Ό νμ©
κ° μλ―Έλ₯Ό ννν ν΄λμ€μ λΏλ¦¬(root)κ° λ μΆμ ν΄λμ€λ₯Ό μ μΈνκ³ , μλ―Έμ μκ΄ μμ΄ λμΌν μλ―Έλ₯Ό κ°λ νλ/λμΌν λμμ μννλ λ©μλλ₯Ό root ν΄λμ€μ μ¬λ¦Ό
μλ―Έμ λ°λΌ λμμ΄ λ¬λΌμ§λ λ©μλλ μΆμ λ©μλλ‘ μ μ
λ£¨νΈ ν΄λμ€λ₯Ό νμ₯(μμ)ν ꡬ체 ν΄λμ€λ₯Ό μλ―Έλ³λ‘ νλμ© μ μνλ©°, ν΄λΉ ν΄λμ€ λ΄μμ νμν νλμ λ©μλλ₯Ό μ μΈ
μμ - μμ Figure ν΄λμ€λ₯Ό ν΄λμ€ κ³μΈ΅κ΅¬μ‘°λ‘ λ³ν
abstract class Figure {
abstract double area ();
}
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 ;
}
}
class Circle extends Figure {
final double radius ;
Circle (double radius ) {
this .radius = radius ;
}
@ Override
double area () {
return Math .PI * radius * radius ;
}
}
κ° κ΅¬μ²΄ ν΄λμ€λ€μ νλμ μ±
μλ§μ μν
κ΄λ ¨ μλ νλλ₯Ό μμ νμ§ μμ
ν ꡬ체 ν΄λμ€μ λ³νκ° λ€λ₯Έ ꡬ체 ν΄λμ€μ μν₯μ λ―ΈμΉμ§ μμ
κ°κ²°νκ³ λͺ
ννλ©°, μλ‘μ΄ κ΅¬μ²΄ ν΄λμ€λ₯Ό μΆκ°νκΈ° μ¬μ
κΈ°μ‘΄ νλλ€μ μλ―Έ
κ° λ³νν μ μκΈ° λλ¬Έμ λΆλ³μΌλ‘ μ μν μ μμμΌλ, ν΄λμ€ κ³μΈ΅κ΅¬μ‘°λ₯Ό μ¬μ©νλ€λ©΄ μμ±μλ₯Ό ν΅ν΄ κ°μ μ΄κΈ°νν λ€ κ°μ΄ λ³ννμ§ μμμ 보μ₯ν μ μλ€λ©΄ λΆλ³μΌλ‘ μ μν μ μμ