κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νλ‘κ·Έλ¨μ μ μ°νκ³ λ³κ²½ μ©μ΄νκ² λ§λ λ€!
* μλ° μΈμ΄μ λ€νμ±(Polymorphism)
- μν κ³Ό ꡬνμΌλ‘ ꡬλΆν΄λ³΄μ
ex) μ΄μ μ - μλμ°¨
μ΄μ μλ μλμ°¨μ μ’ λ₯κ° λ°κ»΄λ μ΄μ μ ν μ μλ€. μλμ°¨μ μμΈν λ΄λΆ ꡬ쑰λΌλμ§.. μ΄λ°κ±΄ μ κ²½ μμ¨λ λλ€!
μν κ³Ό ꡬνμ λΆλ¦¬?
- ν΄λΌμ΄μΈνΈλ λμμ μν (μΈν°νμ΄μ€)λ§ μλ©΄ λλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ ꡬ쑰λ₯Ό λͺ°λΌλ λλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμμ λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λμ΄λ μν₯μ λ°μ§ μλλ€.
- ν΄λΌμ΄μΈνΈλ ꡬν λμ μ체λ₯Ό λ³κ²½ν΄λ μν₯μ λ°μ§ μλλ€.
- μλ° μΈμ΄μ λ€νμ±μ νμ©
- μν = μΈν°νμ΄μ€
- ꡬν = μΈν°νμ€λ₯Ό ꡬνν ν΄λμ€, ꡬν κ°μ²΄
- κ°μ²΄λ₯Ό μ€κ³ν λ μν κ³Ό ꡬνμ λͺ νν λΆλ¦¬
- κ°μ²΄ μ€κ³μ μν (μΈν°νμ΄μ€)μ λ¨Όμ λΆμ¬νκ³ , κ·Έ μν μ μννλ ꡬν κ°μ²΄ λ§λ€κΈ°
κ°μ²΄μ νλ ₯μ΄λΌλ κ΄κ³λΆν° μκ°
- νΌμ μλ κ°μ²΄λ μλ€.
- ν΄λΌμ΄μΈνΈ : μμ², μλ² : μλ΅
- μλ§μ κ°μ²΄ ν΄λΌμ΄μΈνΈμ κ°μ²΄ μλ²λ μλ‘ νλ ₯ κ΄κ³λ₯Ό κ°μ§λ€
λ€νμ±μ λ³Έμ§!!
- ν΄λΌμ΄μΈνΈλ₯Ό λ³κ²½νμ§ μκ³ , μλ²μ ꡬν κΈ°λ₯μ μ μ°νκ² λ³κ²½ν μ μλ€
** μν κ³Ό ꡬνμ λΆλ¦¬ μ 리
- μ μ°νκ³ λ³κ²½μ΄ μ©μ΄
- νμ₯ κ°λ₯ν μ€κ³
- ν΄λΌμ΄μΈνΈμ μν₯μ μ£Όμ§ μλ λ³κ²½ κ°λ₯
- μΈν°νμ΄μ€λ₯Ό μμ μ μΌλ‘ μ μ€κ³νλ κ²μ΄ μ€μ!!
μ€νλ§κ³Ό κ°μ²΄ μ§ν₯
- λ€νμ±μ΄ κ°μ₯ μ€μνλ€!
- μ€νλ§μ λ€νμ±μ κ·Ήλνν΄μ μ΄μ©ν μ μκ² λμμ€λ€
- μ€νλ§μμ μ΄μΌκΈ°νλ μ μ΄μ μμ (IOC), μμ‘΄κ΄κ³ μ£Όμ (DI)μ λ€νμ±μ νμ©ν΄μ μν ꡬνμ νΈλ¦¬νκ² λ€λ£° μ μλλ‘ μ§μνλ€.
- μ€νλ§μ μ¬μ©νλ©΄ λ§μΉ λ κ³ λΈλ 쑰립νλ―μ΄, κ³΅μ° λ¬΄λμ λ°°μ°λ₯Ό μ ννλ―μ΄, ꡬνμ νΈλ¦¬νκ² λ³κ²½ν μ μλ€
μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ (SOLID) ******
- λ¨μΌ μ± μ μμΉ(Single μ΄μ©κ³ μ μ©κ³ ..)
λͺ¨λ ν΄λμ€ μ¦, νλμ ν΄λμ€λ νλμ μ± μ(κΈ°λ₯)λ§ κ°μ§λ€!
μ) μλμ°¨(ν΄λμ€) -----> μνΈ, μμ§,..........λ±λ± μμ²λ μΈλΆ κΈ°λ₯μ΄ λ§μλ°, μ΄κ±Έ μλμ°¨μ νλμ ν΄λμ€μ λ€ λ£μ§λ§κ³ , κ°κ° λΆλ¦¬νμ¬ μμ‘΄κ΄κ³λ‘ μ μν κ²!
- κ°λ°©/νμ μμΉ(Open/Closed μ΄μ©κ³ μ μ©κ³ )
ν΄λμ€κ° νμ₯μλ κ°λ°©λμ΄μκ³ , μμ μλ λ«νμμ΄μΌνλ€!
μ¦, μ΄λ€ κΈ°λ₯μ μΆκ°ν λ κΈ°μ‘΄ μ½λλ₯Ό λ³κ²½νμ§ μκ³ λ κΈ°λ₯μ μΆκ°ν μ μμ΄μΌνλ€.
ν΄λμ€ μμ±ν λ μμμ λ°μμ κΈ°μ‘΄ μ½λλ κ·Έλλ‘!
public class Calculator {
//μ¬κ°ν λμ΄ κ΅¬νλ ν¨μ
public float RectangleArea(Rectangle rectangle) {
return rectangle.width * rectangle.height;
}
//μ λμ΄ κ΅¬νλ ν¨μ
public float CircleArea(Circle circle) {
return circle.width * circle.height;
}
//μ€κ°ν λμ΄ κ΅¬νλ ν¨μ..
//λν μΆκ°λ λλ§λ€ Calculator ν΄λμ€κ° μμ λμ΄ Calculatorλ₯Ό μ°Έμ‘°νλ λ€λ₯Έ ν΄λμ€μ λ¬Έμ κ° λ μ μλ€!
}
κ°λ°© νμ μμΉμ λ°λ₯Έ μ½λ
public abstract class Shape { // Shape μΆμ ν΄λμ€λ₯Ό μμ±νμ¬
public abstract float CalculateArea(); // λμ΄ κ΅¬νλ ν¨μλ₯Ό λ°λ‘ λ§λ λ€
}
public class Rectangle extends Shape { // Shape μμλ°μ μ¬κ°ν ν΄λμ€ λ°λ‘ λΉΌκΈ°
public float width;
public float height;
@Override
public float CalculateArea() { //λμ΄λ λ°λ‘ μ€λ²λΌμ΄λ©νμ¬ κ΅¬ν (μ΄λ κ² ν΄μΌ λνμ΄ μΆκ°λμ΄λ κΈ°μ‘΄μ μ½λλ λ³κ²½λμ§ μλλ€)
return width * height;
}
}
public class Circle extends Shape { // Shape μμ λ°κΈ°
public float radius;
@Override
public float CalculateArea() {
return radius * radius * 3.14;
}
}
- 리μ€μ½ν μΉν μμΉ(Liscope μ΄μ©κ³ μ μ κ³ )
μμ νμ μ κ°μ²΄λ₯Ό μ¬μ©νλ€κ°, μ΄κ±°λ₯Ό μμλ°μ νμ κ°μ²΄λ₯Ό μ¬μ©μ ν΄λ μ μ μλν΄μΌνλ€!
- μΈν°νμ΄μ€ λΆλ¦¬ μμΉ(Interface μ΄μ©κ³ μ μ©κ³ )
νλμ μΌλ°μ μΈ μΈν°νμ΄μ€ 보λ€λ μ¬λ¬κ°μ ꡬ체μ μΈ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ€!
- μμ‘΄ μμ μμΉ(Dependency Inversion μ΄μ©κ³ μ μ©κ³ )
μμ‘΄κ΄κ³λ₯Ό λ§Ίμλ μ’λ μΌλ°μ μ΄κ³ μΆμμ μΈκ²μ μμ‘΄ν΄μΌνλ€!
μ¦, νμ κ°λ μ΄ μλκ³ μ’ λ μμκ°λ , μΆμνλκ²μ μμ‘΄νλκ²μ΄ μ’λ€!
'λ°±μλ(Back-End) κ°λ° > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ° λ²μ μ 리 (8,11,17,21) (0) | 2025.03.19 |
---|---|
μ κ·ννμ(Regex) (1) | 2025.03.01 |
REST API / RESTful μ΄λ? (0) | 2025.02.15 |
μ μ΄μΏΌλ¦¬(jQuery)λ? (0) | 2025.01.20 |
μλ°μ€ν¬λ¦½νΈ / μ€ν¬λ¦½νΈ μΈμ΄ (0) | 2025.01.19 |