πβ Study Goal
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP) μμ κ°λ μ μ΄ν΄ν©λλ€.
- μμμ νμμ±μ μμλ΄ λλ€.
- μμμ΄ μ¬μ©λλ μ¬λ‘λ₯Ό μ½λλ‘ μμ±ν΄λ΄ λλ€.
βοΈ μμ(Inheritance) μ΄λ?
μμ(Inheritance)μ λΆλͺ¨(Super) ν΄λμ€μ κΈ°λ₯μ μ¬μ¬μ©(Reuse)νκ³ κΈ°λ₯μ νμ₯(Expansion)ν μ μλ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP)μ νΉμ§μ λλ€.
π‘ μμμ μ(Why) νμν κΉ?
μμμ Super ν΄λμ€μ κΈ°λ₯μ μ¬μ¬μ©νκ³ , νμ₯ν μ μλ νΉμ§μ κ°μ§κ³ μμ΅λλ€.
μμμ΄ νμν μ΄μ λ λ°λ‘ μ¬μ¬μ©κ³Ό νμ₯μ΄λΌλ κ°λ ₯ν μ₯μ λλ¬Έμ λλ€.
λ§μ½ μμμ΄λΌλ κ°λ μ΄ μ‘΄μ¬νμ§ μλλ€λ©΄, λΉμ·ν κΈ°λ₯μ ꡬνν λλ§λ€ λμΌν μ½λλ₯Ό μμ±ν΄μ£Όμ΄μΌ ν©λλ€.
κ°μ²΄μ§ν₯μ μΈ νλ‘κ·Έλλ°μ λν΄ μ²μ μ ν΄λ³΄μλ λΆλ€μ μλμ κ°μ μκ°μ νμ€ μ μμ΅λλ€.
Ctrl+C / V λ§ νλ©΄ μ¬μ¬μ©νλ κ±° μλμΌ? - κ΅³μ΄ μμμ μ¨μΌ ν΄?
Ctrl+C / V νκ³ μ½λ μ‘°κΈλ§ μμ νλ©΄ νμ₯νλ κ±° μλμΌ?
κ°μ²΄μ§ν₯μ μΈ μ€κ³λ₯Ό μ‘°κΈ λ 곡λΆνλ€ λ³΄λ©΄ 곡ν΅μ μΈ νΉμ§μ΄ νλ μμ΅λλ€.
λ°λ‘, 'κΈ°μ‘΄ μ½λλ₯Ό μμ νμ§ μκ³ κΈ°λ₯μ νμ₯νλΌ' λΌλ κ°λ°© νμ μμΉ OCP κ°λ μ λλ€.
λ¨μν μμ κ°μ μκ°μΌλ‘, κΈ°λ₯μ μΆκ°ν λλ§λ€ Copy & Pasteλ₯Ό λ°λ³΅νλ€ λ³΄λ©΄, νλ‘μ νΈμ κ·λͺ¨κ° 컀μ‘μ λ λ¨ νλμ κ³΅ν΅ κΈ°λ₯(method)μ μμ νκΈ° μν΄ κ΄λ ¨λ λͺ¨λ ν΄λμ€λ₯Ό μμ ν΄μΌ νλ λΆμμ¬κ° λ°μν©λλ€.
Ex) κ³΅ν΅ κΈ°λ₯μ κ°μ§κ³ μλ 100κ°μ ν΄λμ€κ° μλ€λ©΄ μ΄ ν΄λμ€λ₯Ό λͺ¨λ 곡ν΅μ μ΄κ³ νμΌνλκ² μμ ν΄μΌ ν©λλ€.
μ΄λ‘ μ 곡ν΅μ μΌλ‘ μμ ν μ μλ€λ©΄ λ¬Έμ λμ§ μκ² μ§λ§, μ¬λμ΄ νλ‘κ·Έλλ°νλ κ²μ΄κΈ° λλ¬Έμ μ€μκ° λ°μν κ°λ₯μ±μ΄ μμ΅λλ€.
μ½λλ₯Ό μμ νλ κ³Όμ μμ 곡ν΅μ μ΄μ§ λͺ»νλ©΄ μκΈ°μΉ λͺ»ν μ€λ₯κ° λ°μν μ μμΌλ©°,
100κ°λ₯Ό λͺ¨λ μμ νλ€λ μμ μμ²΄κ° μμ°μ±κ³Ό μ μ§λ³΄μμ±μ΄ κ΅μ₯ν λ¨μ΄μ§λ€λ κ²μ μ¦λͺ νκ² λ©λλ€.
νμ§λ§ μ΄ λͺ¨λ λ¬Έμ μ μ ν΄κ²°ν΄μ£Όλ κ°λ μ΄ λ°λ‘ μμ(Inheritance)μ λλ€.
λμΌν κΈ°λ₯μ κ°μ§κ³ μλ Super ν΄λμ€λ₯Ό μμνκ³ , κΈ°λ₯μ μμ μ΄ νμν λ Super ν΄λμ€λ§ μμ ν΄μ£Όμ΄λ ν΄λΉ ν΄λμ€λ₯Ό μμνκ³ μλ Sub ν΄λμ€λ€μ μλ§ κ°μ ν΄λμ€λΌ ν μ§λΌλ μ½λμ μμ μ΄ λΆνμνκ² λκΈ° λλ¬Έμ λλ€.
π‘ μμ(Inheritance)μ μ μ©ν μ½λ
BMW, λ²€μΈ , μ λ€μμ€ 3 μ’ λ₯μ μλμ°¨κ° μλ€κ³ κ°μ ν΄λ³΄κ² μ΅λλ€.
μ΄ μλμ°¨μ 곡ν΅μ μΈ νΉμ§μ CarλΌλ ν΄λμ€λ‘ ꡬνν μ½λλ μλμ κ°μ΅λλ€.
// Super class
public abstract class Car {
private int wheelCount = 4; // μλμ°¨μ λ°ν΄ μ 4κ°
private String engine = "λ―Έκ΅μ° μμ§";
public int getWheelCount() {
return wheelCount;
}
public String getEngine() {
return engine;
}
public abstract void move();
}
μλμ°¨μ λ°ν΄κ° 4κ°μ΄κ³ , μμ§μ λ―Έκ΅μ° μμ§μ μ¬μ©νκ³ μμ΅λλ€. (λͺ¨λ λμΌν μμ§μ μ¬μ©νλ€κ³ κ°μ )
λν, μΆμ ν΄λμ€λ‘ move() λΌλ λ©μλλ₯Ό Sub ν΄λμ€μμ ꡬννλλ‘ νμμ΅λλ€.
μλλ Super ν΄λμ€μΈ Carλ₯Ό μμλ°μ 3 μ’ λ₯μ μλμ°¨μ λλ€.
public class Bmw extends Car {
@Override
public void move() {
System.out.println("BMW λΆλ¦λΆλ¦");
}
}
public class Benz extends Car {
@Override
public void move() {
System.out.println("λ²€μΈ λΆλ¦λΆλ¦");
}
}
public class Genesis extends Car {
@Override
public void move() {
System.out.println("μ λ€μμ€ λΆλ¦λΆλ¦");
}
}
μ΄ μ½λλ§ λ΄λ 3 μ’ λ₯μ μλμ°¨κ° λ°ν΄(Wheel)μ κ°μμ μ΄λ€ μμ§μ μ¬μ©νλμ§μ λν νλλ₯Ό λ°λ‘ μμ±ν΄μ£Όμ§ μμλ λλ€λ μ¬μ€μ μ μ μμ΅λλ€.
μ¦, μμ(Inheritance)λ§μΌλ‘ 보μΌλ¬ νλ μ΄νΈ μ½λλ₯Ό μ€μΌ μ μκ² λμμ΅λλ€.
κ·Έλ¬λ€ λ¬Έλ λ―Έκ΅μ° μμ§μμ μ΄ 3μ’ λ₯μ μ°¨ λͺ¨λ κ΅μ° μμ§μΌλ‘ λ³κ²½νκ³ , λ°ν΄μ μκ° 3κ°λ‘ μ€μ¬μ§λ μλκ° μλ€κ³ κ°μ ν΄λ³΄κ² μ΅λλ€.
λ§μ½ μμμ μ¬μ©νμ§ μμλ€λ©΄, 3κ°μ ν΄λμ€ λͺ¨λ μμ ν΄μ£Όμ΄μΌ νκ² μ§λ§, μμμ μ μ©ν μ½λλ Super ν΄λμ€μΈ Car ν΄λμ€λ§ λ³κ²½ν΄μ£Όλ©΄ ν΄κ²°λ©λλ€.
// Super class
public abstract class Car {
private int wheelCount = 3; // μλμ°¨μ λ°ν΄ μ 3κ°λ‘ λ³κ²½!
private String engine = "νκ΅μ° μμ§";
public int getWheelCount() {
return wheelCount;
}
public String getEngine() {
return engine;
}
public abstract void move();
}
β κ²°λ‘
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP)μ μμ(Inheritance)μ κ°λ μ 곡λΆν¨μΌλ‘μ¨, μ½λλ₯Ό μ¬μ¬μ©νκ³ νμ₯ν μ μμ΅λλ€.
- νλ‘μ νΈμ μμ°μ±, μ μ§λ³΄μμ±, μ¬μ¬μ©μ±μ λμΌ μ μμ΅λλ€.
github : https://github.com/tmdgh1592