μΆμν΄λμ€λ μ¬λ¬ ν΄λμ€ κ°μ 곡ν΅λ νλμ λ©μλλ₯Ό μΆμΆνμ¬ μ μν ν΄λμ€μ΄λ€.
μλ₯Ό λ€μ΄, μ°λ¦¬κ° Phoneμ΄λΌλ ν΄λμ€λ₯Ό λ§λ λ€κ³ κ°μ ν΄ λ³΄μ. μ΄λ₯Ό κΈ°λ°μΌλ‘ SmartPhoneκ³Ό TelePhoneμ΄λΌλ ν΄λμ€λ₯Ό λ§λ€ μ μλ€. SmartPhoneκ³Ό TelePhoneμ κ°κΈ° λ€λ₯Έ λ°©μμΌλ‘ λμνμ§λ§, λ λ€ "μ ν"λ₯Ό νλ€λ 곡ν΅μ μ΄ μλ€. λν, μ νλ₯Ό κ±ΈκΈ° μν΄ μ νλ²νΈλ₯Ό μ λ ₯ν λ λ€μ΄μΌμ λλ₯Έλ€λ 곡ν΅λ λμμ΄ μ‘΄μ¬νλ€. λ€λ§, SmartPhoneμ ν°μΉ λ°©μμΌλ‘ λ€μ΄μΌμ μ λ ₯νκ³ , TelePhoneμ λ²νΌ λ°©μμΌλ‘ λ€μ΄μΌμ μ λ ₯νλ€λ μ°¨μ΄κ° μλ€.
μ΄μ²λΌ 곡ν΅λ νΉμ±(μ: "λ€μ΄μΌ"κ³Ό "μ ν κΈ°λ₯")μ μΆμΆνμ¬ μ μν ν΄λμ€λ₯Ό μΆμ ν΄λμ€λΌκ³ νλ€. (ν΄λμ€μμμ 곡ν΅λ νΉμ±μ νλμ λ©μλλ₯Ό λ§νλ€.) μΆμ ν΄λμ€λ μ€μ λ‘ κ°μ²΄λ₯Ό μμ±ν μλ μμ§λ§, μ΄λ₯Ό κΈ°λ°μΌλ‘ λ§λ€μ΄μ§ ν΄λμ€(SmartPhone, TelePhone)μμ ꡬ체μ μΈ λμμ ꡬνν μ μλ€. μ΄λ κ² μΆμ ν΄λμ€λ₯Ό μμλ°μ ꡬ체μ μΈ κ°μ²΄λ₯Ό μμ±νλ ν΄λμ€λ₯Ό μ€μ²΄ ν΄λμ€λΌκ³ νλ€.
μ΄λ κ² μΆμ ν΄λμ€λ₯Ό μ¬μ©νλ©΄ μ½λμ μ€λ³΅μ μ€μ΄κ³ , κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μΌκ΄μ±μ μ μ§ν μ μλ€.
μ΄λ κ² μ€μ²΄ ν΄λμ€μ 곡ν΅μ μΈ νΉμ±(νλ, λ©μλ)μ λ½μλ΄μ΄ μΆμ ν΄λμ€λ‘ λ§λλ μ΄μ κ° λ¬΄μμΌκΉ?
λ§μ½ μ€μ²΄ ν΄λμ€λ₯Ό μ€κ³νλ μ¬λμ΄ μ¬λ¬ λͺ μΌ κ²½μ°, μ€μ²΄ ν΄λμ€λ§λ€ νλμ λ©μλκ° μ κ°κΈ° λ€λ₯Έ μ΄λ¦μ κ°μ§κ² λ κ²μ΄λ€.
μλ₯Ό λ€μ΄, Telephoneμμλ μμ μμ μ΄λ¦μ μ μ₯νλ νλλ₯Ό user, SmartPhoneμμλ memberλΌκ³ μ μνκ³ μ νλ₯Ό κ±°λ λ©μλλ₯Ό TelePhoneμμλ makeCall(), SmartPhoneμμλ ring()μ΄λΌκ³ νλ€λ©΄ κ°λ°μ νλ©΄μ κ°λ°μλ§λ€ μ°λ νλλͺ κ³Ό λ©μλλͺ μ΄ λ€λ₯΄κΈ° λλ¬Έμ νΌλμ΄ μ½κ² λ°μνκ² λλ€.
μ΄λ¬ν κ²μ λ°©μ§νκΈ° μν΄ μΆμ ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄λ€. μμ μμμμ μ μ©νμλ©΄ μΆμ ν΄λμ€μ user νλμ makeCall() λ©μλλ₯Ό 곡ν΅μ μΌλ‘ μ μΈνμ¬ μΆμ ν΄λμ€λ₯Ό ꡬμΆνλ©΄ λλ€. μΆμ ν΄λμ€μμλ 미리 μ μν νλμ λ©μλκ° μλ€λ©΄, μ€μ²΄ ν΄λμ€μμ μΆμ ν΄λμ€μ νλμ λ©μλλͺ μ λ³κ²½ν μ μκ³ λ¬΄μ‘°κ±΄ ν΄λΉ λͺ λͺ μΌλ‘ ꡬνν΄μΌ νλ€. λ°λΌμ, νλμ λ©μλ μ΄λ¦μ ν΅μΌνμ¬ μ μ§ λ³΄μμ±μ λμ΄κ³ ν΅μΌμ±μ μ μ§ν μ μκ² λλ€.
곡ν΅μ μΈ νλμ λ©μλλ μΆμ ν΄λμ€μ λͺ¨λ μ μΈνκ³ , λ€λ₯Έ νΉμ± λ° μΆκ°λ νΉμ±λ§ μ€μ²΄ ν΄λμ€μ μ μΈνλ©΄ μ€μ²΄ ν΄λμ€λ₯Ό μμ±νλ λ° μκ°μ μ μ½ν μ μλ€.
μμ μμμμ TelePhoneκ³Ό SmartPhoneμ Phoneμ μμλ°κΈ° λλ¬Έμ user νλμ makeCall() λ©μλλ₯Ό μ μΈν νμκ° μλ€. μΆκ°μ μΈ νΉμ±λ§ μμ λ νλ λ° λ©μλλ₯Ό μ€μ²΄ ν΄λμ€μ κ°κ° μ μΈμ νλ©΄ λλ€. κ·Έλ¦¬κ³ μΆμ ν΄λμ€μ μΆμ λ©μλλΌλ κ²μ΄ μλλ° μΆμ λ©μλλ₯Ό ꡬννκΈ° μν λ°©λ²μΌλ‘λ μΆμ ν΄λμ€λ₯Ό μμλ°μ μ€μ²΄ ν΄λμ€μ μ€λ²λΌμ΄λ©νμ¬ λ©μλ λ΄λΆμ λ‘μ§μ μμ±μ νλ©΄ λλ€.
λν νμ μμλ μ£Όλ‘ κ΄λ¦¬μ κΈ κ°λ°μλ€μ΄ ꡬ쑰λ₯Ό μ‘μμ£Όκ³ κ°λ°μ νλλ° μ΄λ¬ν μν©μμλ 곡ν΅λ λΆλΆμ΄ μλ€λ©΄ μΆμ ν΄λμ€λ₯Ό μ¬μ©ν μ μμ κ²μ΄λ€.
μΆμ ν΄λμ€λ₯Ό μ μΈν λμλ ν΄λμ€ μ μΈμ abstract ν€μλλ₯Ό λΆμ¬μΌ νλ€. abstractλ₯Ό λΆμ΄λ©΄ new μ°μ°μλ₯Ό μ΄μ©ν΄μ κ°μ²΄λ₯Ό λ§λ€μ§ λͺ»νκ³ μμμ ν΅ν΄μ μμ ν΄λμ€λ₯Ό μ΄μ©νμ¬ ν΄λμ€λ₯Ό λ§λ€ μ μλ€.
public abstract class ν΄λμ€ {
//νλ
//μμ±μ
//λ©μλ
}
μΆμ ν΄λμ€λ μΌλ° ν΄λμ€μ λ§μ°¬κ°μ§λ‘ νλ, μμ±μ, λ©μλλ₯Ό μ μΈν μ μλ€. new μ°μ°μλ‘ μ§μ μμ±μλ₯Ό νΈμΆν μλ μμ§λ§ μμ κ°μ²΄κ° μμ±λ λ super()λ₯Ό νΈμΆν΄μ μΆμ ν΄λμ€ κ°μ²΄λ₯Ό μμ±νκΈ°μ μΆμ ν΄λμ€λ μμ±μκ° λ°λμ μμ΄μΌ νλ€.
package abstractclass;
public abstract class Phone {
// νλ
public String user;
// μμ±μ
public Phone(String user) {
this.user = user;
}
// λ©μλ
public void makeCall() {
System.out.println("μ νλ₯Ό 건λ€");
}
}
package abstractclass;
public class SmartPhone extends Phone {
// μμ±μ
public SmartPhone(String user) {
super(user);
}
// λ©μλ
public void internetSearch() {
System.out.println("κ²μ νκΈ°");
}
}
package abstractclass;
public class TelePhone extends Phone {
public TelePhone(String user) {
super(user);
}
// λ©μλ
public void clickDial() {
System.out.println("λ€μ΄μΌμ λλ₯Έλ€");
}
}
μμμ μ κΉ μΆμ λ©μλλΌλ κ²μ μ€λͺ νμλλ° λ μμΈν μ€λͺ νμλ©΄ μΆμ λ©μλλ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP)μμ λ©μλμ μ μΈλ§ μ μνκ³ , ꡬν(μ€μ λμ)μ νμ§ μμ λ©μλλ₯Ό μλ―Ένλ€. ꡬνλΆκ° μμΌλ―λ‘ μ€κ΄νΈ {} λμ λ©μλ μ μΈ λ€μ μΈλ―Έμ½λ‘ (;)μ μ¬μ©νλ€. μ΄ λ©μλλ μμλ°λ ν΄λμ€μμ μ¬μ μ(Override)νμ¬ κ΅¬μ²΄μ μΈ κ΅¬νμ μ 곡ν΄μΌ νλ€.
Phoneμ μμλ₯Ό λ€μ μ¬μ©νμλ©΄ μλμ μ½λμ²λΌ μΆμ λ©μλλ₯Ό μ μΈν μ μλ€.
package abstractclass;
public abstract class Phone {
// νλ
public String user;
// μμ±μ
public Phone(String user) {
this.user = user;
}
// μΆμ λ©μλ
public abstract void makeCall();
}
μ΄λ κ² μ μΈν μΆμ λ©μλλ μμμ λ°λ μ€μ²΄ ν΄λμ€μμ 무쑰건 μ§μ μ¬μ μνμ¬ λ΄λΆ λ‘μ§μ μμ±ν΄μΌ νλ€. μλμ μ½λλ₯Ό μ°Έκ³ νκΈΈ λ°λλ€.
package abstractclass;
public class SmartPhone extends Phone {
// μμ±μ
public SmartPhone(String user) {
super(user);
}
// μΆμ λ©μλ μ¬μ μ
@Override
public void makeCall() {
System.out.println("μ€λ§νΈ ν°μΌλ‘ μ ν κ±ΈκΈ°");
}
}
package abstractclass;
public class TelePhone extends Phone {
public TelePhone(String user) {
super(user);
}
// λ©μλ
@Override
public void makeCall() {
System.out.println("ν
λ ν°μΌλ‘ μ ν κ±ΈκΈ°");
}
}
μ°Έκ³
https://limkydev.tistory.com/188
νΌκ³΅μ - 379p ~ 387p