1οΈβ£μΈν°νμ΄μ€ μμ
μΈν°νμ΄μ€λ λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό μμν μ μμΌλ©°, ν΄λμ€μλ λ¬λ¦¬ λ€μ€ μμμ΄ κ°λ₯νλ€. μμ μΈν°νμ΄μ€μ ꡬν ν΄λμ€λ μμ μΈν°νμ΄μ€μ λ©μλλΏλ§ μλλΌ λΆλͺ¨ μΈν°νμ΄μ€μ μΆμ λ©μλκΉμ§ λͺ¨λ μ¬μ μν΄μΌ νλ€. κ·Έλ¦¬κ³ κ΅¬ν κ°μ²΄λ μμ μΈν°νμ΄μ€μ λΆλͺ¨ μΈν°νμ΄μ€ λ³μμ λμ κ°λ₯νλ€.
ꡬν κ°μ²΄κ° μμ μΈν°νμ΄μ€ λ³μμ λμ λλ©΄ λΆλͺ¨μ μμ μΈν°νμ΄μ€μ μΆμλ©μλλ₯Ό λͺ¨λ νΈμΆν μ μμΌλ, λΆλͺ¨ μΈν°νμ΄μ€ λ³μμ λμ λλ©΄ λΆλͺ¨ μΈν°νμ΄μ€μ μΆμ λ©μλλ§ νΈμΆν μ μλ€.
public interface InterfaceA {
void methodA();
}
public interface InterfaceB {
void methodB();
}
public interface InterfaceC extends InterfaceA, InterfaceB {
void methodC();
}
public class InterfaceImpl implements InterfaceC {
@Override
public void methodA() {
System.out.println("InterfaceCμ methodA");
}
@Override
public void methodB() {
// TODO Auto-generated method stub
System.out.println("InterfaceCμ methodB");
}
@Override
public void methodC() {
// TODO Auto-generated method stub
System.out.println("InterfaceCμ methodC");
}
}
public class ExtendsExample {
public static void main(String[] args) {
InterfaceImpl impl = new InterfaceImpl();
InterfaceA a = impl;
a.methodA();
InterfaceB b = impl;
b.methodB();
InterfaceC c = impl;
c.methodA();
c.methodB();
c.methodC();
}
}
2οΈβ£νμ λ³ν
μΈν°νμ΄μ€μ νμ λ³νμ μΈν°νμ΄μ€μ ꡬν ν΄λμ€ κ°μ λ°μνλ€. μΈν°νμ΄μ€ λ³μμ ꡬν κ°μ²΄λ₯Ό λμ νλ©΄ ꡬν κ°μ²΄λ μΈν°νμ΄μ€ νμ μΌλ‘ μλ νμ λ³νλλ€. λ°λλ‘ μΈν°νμ΄μ€ νμ μ ꡬν ν΄λμ€ νμ μΌλ‘ λ³νμν¬ μ μλλ°, μ΄λλ κ°μ νμ λ³νμ΄ νμνλ€.
β‘ μλ νμ λ³νμ΄ μΌμ΄λλ κ²½μ°
ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ νμ μΌλ‘ μλλ³νλλ©΄ μΈν°νμ΄μ€μ μ μΈλ λ©μλλ§ μ¬μ© κ°λ₯
λΆλͺ¨ ν΄λμ€κ° μΈν°νμ΄μ€λ₯Ό ꡬννκ³ μλ€λ©΄ μμ ν΄λμ€λ μΈν°νμ΄μ€ νμ μΌλ‘ μλ νμ λ³νλ μ μλ€.
β‘ κ°μ νμ λ³ν
κ°μ νμ λ³νμ μΊμ€ν κΈ°νΈλ₯Ό μ¬μ©ν΄μ μΈν°νμ΄μ€ νμ μ ꡬν ν΄λμ€ νμ μΌλ‘ λ³νμν€λ κ²μ λ§νλ€.
μλ νμ λ³ν νμ μΈν°νμ΄μ€μ μ μΈλ λ©μλκ° μλ ꡬν κ°μ²΄μ μ μΈλ λ©μλλ₯Ό νΈμΆνκ³ μΆλ€λ©΄ μΊμ€ν κΈ°νΈλ‘ κ°μ νμ λ³νμ νλ©΄ λλ€.
3οΈβ£λ€νμ±
λ€νμ±μ΄λ μ¬μ© λ°©λ²μ λμΌνμ§λ§ λ€μν κ²°κ³Όκ° λμ€λ κ²μ λ§νλ€.
λ€μμ²λΌ ꡬν κ°μ²΄κ° BμΈμ§ CμΈμ§μ λ°λΌ κ°μ²΄ Aμ λ©μλ νΈμΆ κ²°κ³Όλ λ¬λΌμ§ μ μλ€.
μμμ λ€νμ±κ³Ό λ§μ°¬κ°μ§λ‘ μΈν°νμ΄μ€ μμ λ€νμ±μ ꡬννκΈ° μν΄ μ¬μ μμ μλ νμ λ³ν κΈ°λ₯μ μ΄μ©νλ€.
μΈν°νμ΄μ€μ μΆμ λ©μλλ ꡬν ν΄λμ€μμ μ¬μ μλ₯Ό ν΄μΌ νλ©°, μ¬μ μλλ λ΄μ©μ ꡬν ν΄λμ€λ§λ€ λ€λ₯΄λ€. ꡬν κ°μ²΄λ μΈν°νμ΄μ€ νμ μΌλ‘ μλ νμ λ³ν λκ³ , μΈν°νμ΄μ€ λ©μλ νΈμΆμ ꡬν κ°μ²΄μ μ¬μ μλ λ©μλκ° νΈμΆλμ΄ λ€μν μ€ν κ²°κ³Όλ₯Ό μ»μ μ μλ€.
β‘νλμ λ€νμ±
public class HankookTire implements Tire{
@Override
public void roll() {
System.out.println("νκ΅νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.");
}
}
public class KumhoTire implements Tire {
@Override
public void roll() {
System.out.println("κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.");
}
}
public class Car {
Tire tire1 = new HankookTire();
Tire tire2 = new HankookTire();
void run() {
tire1.roll();
tire2.roll();
}
}
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
myCar.run();
//νκ΅νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
//νκ΅νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
myCar.tire1 = new KumhoTire();
myCar.tire2 = new KumhoTire();
myCar.run();
//κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
//κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
}
}
β‘λ§€κ°λ³μμ λ€νμ±
λ©μλ νΈμΆ μ λ§€κ°κ°μ λ€μννκΈ° μν΄ μμμμλ λ§€κ°λ³μ νμ μ λΆλͺ¨ νμ μΌλ‘ μ μΈνκ³ νΈμΆν λμλ λ€μν μμ κ°μ²΄λ₯Ό λμ νλ€. μ΄κ²μ μλ νμ λ³ν λλ¬ΈμΈλ°, λΉμ·ν μλ¦¬λ‘ λ§€κ°λ³μ νμ μ μΈν°νμ΄μ€λ‘ μ μΈνλ©΄ λ©μλ νΈμΆ μ λ€μν ꡬν κ°μ²΄λ₯Ό λμ ν μ μλ€.
public class Car {
void run(Tire tire) {
tire.roll();
}
}
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
Tire tire1 = new KumhoTire();
Tire tire2 = new HankookTire();
myCar.run(tire1);//κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
myCar.run(tire2);//νκ΅νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
}
}
μλ νμ λ³ν -> μ€λ²λΌμ΄λ© λ©μλ νΈμΆ -> λ€νμ±
4οΈβ£κ°μ²΄ νμ νμΈ
instanceof μ°μ°μλ μΈν°νμ΄μ€μμλ μ¬μ© κ°λ₯νλ€.
public class Car {
void run(Tire tire) {
if(tire instanceof KumhoTire){
tire.roll();
} else {
System.out.println("κΈνΈνμ΄μ΄λ§ μ¬μ©κ°λ₯ν©λλ€.");
}
}
}
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
Tire tire1 = new KumhoTire();
Tire tire2 = new HankookTire();
myCar.run(tire1);//κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
myCar.run(tire2);//κΈνΈνμ΄μ΄λ§ μ¬μ©κ°λ₯ν©λλ€.
}
}
5οΈβ£λ΄μΈλ μΈν°νμ΄μ€
Java 15λΆν°λ 무λΆλ³ν μμ μΈν°νμ΄μ€ μμ±μ λ°©μ§νκΈ° μν΄ λ΄μΈλ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν μ μλ€.
InterfaceAμ μμ μΈν°νμ΄μ€λ InterfaceBλ§ κ°λ₯νκ³ , κ·Έ μ΄μΈλ μμ μΈν°νμ΄μ€κ° λ μ μλλ‘ λ€μκ³Ό κ°μ΄ InterfaceAλ₯Ό μ μΈν μ μλ€.
public sealed interface InterfaceA permits InterfaceB {...}
λ΄μΈλ InterfaceAμ μμ InterfaceBλ non-sealed ν€μλλ‘ λ€μκ³Ό κ°μ΄ μ μΈνκ±°λ sealed ν€μλλ‘ λ λ€λ₯Έ λ΄μΈ μΈν°νμ΄μ€λ‘ μ μΈν΄μΌ ν¨.
public non-sealed interface InterfaceB extends InterfaceA {...}
non-sealedλ λ΄μΈ ν΄μ λ₯Ό μλ―Ένλ©°, λ°λΌμ InterfaceBλ μμ μΈν°νμ΄μ€λ₯Ό κ°μ§ μ μλ€.
βλ³Έ ν¬μ€ν μ 'μ΄κ²μ΄ μλ°λ€' κ΅μ¬λ₯Ό λ°νμΌλ‘ 곡λΆν λ΄μ©μ μ 리ν κ²μ λλ€.
'Javaπ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
πμμΈμ²λ¦¬, μμΈ ν΄λμ€ (0) | 2023.01.21 |
---|---|
π§‘μ€μ²© ν΄λμ€,μΈν°νμ΄μ€ & μ΅λͺ κ°μ²΄ (0) | 2023.01.18 |
πμΈν°νμ΄μ€(1) (0) | 2023.01.16 |
πλ³μμ νμ (0) | 2022.11.30 |
μλ°μ μμ(JDKμ μλ° νλ‘κ·Έλ¨ μ€ν ꡬ쑰) (0) | 2022.11.22 |