8-2μμ(νμ λ³νκ³Ό λ€νμ±)
μΈν°νμ΄μ€μ λ€νμ±
νλ‘κ·Έλ¨μ κ°λ°ν λ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν΄μ λ©μλλ₯Ό νΈμΆνλλ‘ μ½λ©νλ€λ©΄, ꡬν κ°μ²΄λ₯Ό λ§€μ° μμ½κ³ λΉ λ₯΄κ² κ΅μ²΄ν μ μλ€.
μλ νμ λ³ν
ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ νμ μΌλ‘ λ³νλλ κ²μ μλ νμ λ³νμ ν΄λΉνλ€. μλ νμ λ³νμ νλ‘κ·Έλ¨ μ€ν λμ€μ μλμ μΌλ‘ νμ λ³νμ΄ μΌμ΄λλ κ²μ λ§νλ€.
ex) μΈν°νμ΄μ€ λ³μ = ꡬνκ°μ²΄;
*μΈν°νμ΄μ€ ꡬν ν΄λμ€λ₯Ό μμν΄μ μμ ν΄λμ€λ₯Ό λ§λ€μλ€λ©΄ μμ κ°μ²΄ μμ μΈν°νμ΄μ€ νμ μΌλ‘ μλ νμ λ³νν μ μλ€. νλμ λ§€κ°λ³μμ νμ μ μΈν°νμ΄μ€λ‘ μ μΈνλ©΄ λ€μν ꡬν κ°μ²΄λ₯Ό λμ ν΄μ μ€νκ²°κ³Όλ₯Ό λ€μνκ² λ§λ€ μ μλ€.
νλμ λ€νμ±
ex)
# μΈν°νμ΄μ€
public interface Tire {
public void roll();
}
#ꡬν ν΄λμ€
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 frontLeftTire = new HankookTire();
Tire frontRightTire = new HankookTire();
Tire backLeftTire = new HankookTire();
Tire bakcRightTire = new HankookTire();
void run() {
frontLeftTire.roll();
frontRightTire.roll();
bakcLeftTire.roll();
backRightTire.roll();
}
}
#νλ λ€νμ±
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
myCar.run();
myCar.frontLeftTire = new KumhoTire();
myCar.frontRightTire = new KumhoTire();
myCar.run();
}
}
--> κ²°κ³Ό
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
λ§€κ° λ³μμ λ€νμ±
λ§€κ° λ³μμ νμ μ΄ μΈν°νμ΄μ€μΌ κ²½μ° μ΄λ ν ꡬν κ°μ²΄λ λ§€κ°κ°μΌλ‘ μ¬μ©ν μ μκ³ , μ΄λ€ ꡬν κ°μ²΄κ° μ 곡λλλμ λ°λΌ λ©μλμ μ€νκ²°κ³Όλ λ€μν΄μ§ μ μλ€. μ΄κ²μ΄ μΈν°νμ΄μ€ λ§€κ° λ³μμ λ€νμ±μ΄λ€.
ex)
#λ§€κ° λ³μμ μΈν°νμ΄μ€ν
public class Driver {
public void drive(Vehicle vehicle) {
vehicle.run();
}
}
#μΈν°νμ΄μ€
public interace Vehicle{
public void run();
}
#ꡬν ν΄λμ€
public class Bus implements Vehicle {
@Overide
public void run() {
System.out.println("λ²μ€κ° λ¬λ¦½λλ€.");
}
}
#ꡬν ν΄λμ€
public class Taxi implements Vehicle {
@Overide
public void run() {
System.out.println("νμκ° λ¬λ¦½λλ€.");
}
}
#λ§€κ° λ³μμ λ€νμ± ν μ€νΈ
public class DirverExample {
public static void main(String[] args) {
Driver driver = new Driver();
Bus bus = new Bus();
Taxi taxi = new Taxi();
driver.dirve(bus);
driver.dirve(taxi);
}
}
κ°μ νμ λ³ν
ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ νμ μΌλ‘ μλ νμ λ³ννλ©΄, μΈν°νμ΄μ€μ μ μΈλ λ©μλλ§ μ¬μ© κ°λ₯νλ€λ μ μ½ μ¬νμ΄ λ°λ₯Έλ€.
νμ§λ§, κ²½μ°μ λ°λΌμλ ꡬν ν΄λμ€μ μ μΈλ νλμ λ©μλλ₯Ό μ¬μ©ν΄μΌ ν κ²½μ°λ λ°μνλ€. μ΄ λ κ°μ νμ λ³ν(casting)μ ν΄μ λ€μ ꡬν ν΄λμ€ νμ μΌλ‘ λ³νν λ€μ, ꡬν ν΄λμ€μ νλμ λ©μλλ₯Ό μ¬μ©ν μ μλ€.
ex) ꡬνν΄λμ€ λ³μ = (ꡬν ν΄λμ€) μΈν°νμ΄μ€λ³μ;
κ°μ²΄ νμ νμΈ
κ°μ νμ λ³νμ ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ νμ μΌλ‘ λ³νλμ΄ μλ μνμμ κ°λ₯νλ€. κ·Έλ¬λ μ΄λ€ ꡬν κ°μ²΄κ° λ³νλμ΄ μλμ§ μ μ μλ μνμμ 무μμ κ°μ νμ λ³νν κ²½μ° ClassCastExceptionμ΄ λ°μν μλ μλ€.
instanceof μ°μ°μ μ¬μ©
ex)
#κ°μ²΄ νμ νμΈ
public class Driver {
public void drive(Vehicle vehicle) {
if(vehicle instanceof Bus) {
Bus bus = (Bus) vehicle;
bus.checkFare();
}
vehicle.run();
}
}
μ€ν
public class DirverExample {
public static void main(String[] args) {
Driver driver = new Driver();
Bus bus = new Bus();
Taxi taxi = new Taxi();
driver.dirve(bus);
driver.dirve(taxi);
}
}
μ€ν κ²°κ³Ό
μΉμ°¨μκΈμ 체ν¬ν©λλ€.
λ²μ€κ° λ¬λ¦½λλ€.
νμκ° λ¬λ¦½λλ€.
μΈν°νμ΄μ€ μμ
μΈν°νμ΄μ€λ λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό μμν μ μλ€. μΈν°νμ΄μ€λ ν΄λμ€μλ λ¬λ¦¬ λ€μ€ μμμ νμ©νλ€.
ex)
public interface νμμΈν°νμ΄μ€ extends μμμΈν°νμ΄μ€1, μμμΈν°νμ΄μ€2 {...}
*νμ μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€λ νμ μΈν°νμ΄μ€μ λ©μλλΏλ§ μλλΌ μμ μΈν°νμ΄μ€μ λͺ¨λ μΆμ λ©μλμ λν μ€μ²΄ λ©μλλ₯Ό κ°μ§κ³ μμ΄μΌ νλ€.