βΆ ν ν΄λμ€κ° μ¬λ¬ μΈν°νμ΄μ€λ₯Ό ꡬννλ κ²½μ°
ν ν΄λμ€κ° μ¬λ¬ ν΄λμ€λ₯Ό μμλ°μΌλ©΄ λ©μλ νΈμΆμ΄ λͺ¨νΈν΄μ§λ λ¬Έμ κ° λ°μν μκ° μλ€.
νμ§λ§ μΈν°νμ΄μ€λ ν ν΄λμ€κ° μ¬λ¬ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μλ€.
μΈν°νμ΄μ€λ ꡬν μ½λλ λ©€λ² λ³μλ₯Ό κ°μ§μ§ μκΈ° λλ¬Έμ μ¬λ¬ κ°λ₯Ό λμμ ꡬνν μ μλ€.
λ μΈν°νμ΄μ€μ μ΄λ¦μ΄ κ°μ λ©μλκ° μ μΈλμλ€κ³ ν΄λ ꡬνμ ν΄λμ€μμ μ΄λ£¨μ΄μ§λ―λ‘, μ΄λ€ λ©μλλ₯Ό νΈμΆν΄μΌ νλμ§ λͺ¨νΈνμ§ μμ κ²μ΄λ€.
package interfaceex;
public class CustomerTest {
public static void main(String[] args) {
Customer customer = new Customer();
Buy buyer = customer; // Customer ν΄λμ€νμΈ customerλ₯Ό Buy μΈν°νμ΄μ€νμΈ buyerμ λμ
νμ¬ ν λ³ν
buyer.buy(); // buyerλ Buy μΈν°νμ΄μ€μ λ©μλλ§ νΈμΆ κ°λ₯
buyer.order();
Sell seller = customer; // Customer ν΄λμ€νμΈ customerλ₯Ό Sell μΈν°νμ΄μ€νμΈ sellerμ λμ
νμ¬ ν λ³ν
seller.sell(); // sellerλ Sell μΈν°νμ΄μ€μ λ©μλλ§ νΈμΆ κ°λ₯
seller.order();
if (seller instanceof Customer) {
Customer customer2 = (Customer) seller; // Sellerλ₯Ό νμ ν΄λμ€νμΈ Customerλ‘ λ€μ ν λ³ν
customer2.buy();
customer2.sell();
}
}
}
βΆ λ μΈν°νμ΄μ€μ λν΄νΈ λ©μλκ° μ€λ³΅λλ κ²½μ°
μ μ λ©μλλ μΈμ€ν΄νΈ μμ±κ³Ό μκ΄μμ΄ μ¬μ©ν μ μλ€.
κ·Έλ¬λ λν΄νΈ λ©μλλ μΈμ€ν΄μ€λ₯Ό μμ±ν΄μΌ νΈμΆν μ μλ λ©μλμ΄κΈ° λλ¬Έμ, μ΄λ¦μ΄ κ°μ λν΄νΈ λ©μλκ° λ μΈν°νμ΄μ€μ μμΌλ©΄ λ¬Έμ κ° λλ€.
β
β
package interfaceex;
public class CustomerTest {
public static void main(String[] args) {
Customer customer = new Customer();
Buy buyer = customer;
buyer.buy();
buyer.order(); // μ¬μ μλ λ©μλ νΈμΆλ¨
Sell seller = customer;
seller.sell();
seller.order(); // μ¬μ μλ λ©μλ νΈμΆλ¨
if (seller instanceof Customer) {
Customer customer2 = (Customer) seller;
customer2.buy();
customer2.sell();
}
customer.order(); // μ¬μ μλ λ©μλ νΈμΆλ¨
}
}
<μ€ν κ²°κ³Ό>
μ¬κΈ°μμ μ£Όμν μ μ customerκ° BuyνμΌλ‘ λ³νλκ³ buyer.order( )λ₯Ό νΈμΆνλ©΄ Buyμ ꡬνν λν΄νΈ λ©μλκ° μλ Customer ν΄λμ€μ μ¬μ μν λ©μλκ° νΈμΆλλ€λ μ¬μ€μ΄λ€. μ΄λ 254μͺ½μ μμμμ μ€λͺ ν μλ° κ°μ λ©μλ μ리μ λμΌνλ€.
β
βΆ μΈν°νμ΄μ€ μμνκΈ°
μΈν°νμ΄μ€ κ°μλ μμμ΄ κ°λ₯νλ€. μΈν°νμ΄μ€ κ° μμμ ꡬν μ½λλ₯Ό ν΅ν΄ κΈ°λ₯μ μμνλ κ²μ΄ μλλ―λ‘ ν μμμ΄λΌκ³ λΆλ₯Έλ€. ν΄λμ€μ κ²½μ°μλ νλμ ν΄λμ€λ§ μμλ°μ μ μμ§λ§, μΈν°νμ΄μ€λ μ¬λ¬ κ°λ₯Ό λμμ μμλ°μ μ μλ€. ν μΈν°νμ΄μ€κ° μ¬λ¬ μΈν°νμ΄μ€λ₯Ό μμλ°μΌλ©΄, μμλ°μ μΈν°νμ΄μ€λ μμ μΈν°νμ΄μ€μ μ μΈν μΆμ λ©μλλ₯Ό λͺ¨λ κ°μ§κ² λλ€.
β
package interfaceex;
public interface MyInterface extends X, Y {
void myMethod();
}
package interfaceex;
public class MyClass implements MyInterface {
@Override
public void x() { // X μΈν°νμ΄μ€μμ μμλ°μ x() λ©μλ ꡬν
System.out.println("x()");
}
@Override
public void y() { // Y μΈν°νμ΄μ€μμ μμλ°μ y() λ©μλ ꡬν
System.out.println("y()");
}
@Override
public void myMethod() { // MyInterface μΈν°νμ΄μ€μ myMethod() λ©μλ ꡬν
System.out.println("myMethod()");
}
}
package interfaceex;
public class MyClassTest {
public static void main(String[] args) {
MyClass mClass = new MyClass();
X xClass = mClass; // μμ μΈν°νμ΄μ€ XνμΌλ‘ λμ
νλ©΄
xClass.x(); // Xμ μ μΈν λ©μλλ§ νΈμΆ κ°λ₯
Y yClass = mClass; // μμ μΈν°νμ΄μ€ YνμΌλ‘ λμ
νλ©΄
yClass.y(); // Yμ μ μΈν λ©μλλ§ νΈμΆ κ°λ₯
MyInterface iClass = mClass; // ꡬνν μΈν°νμ΄μ€ν λ³μμ λμ
νλ©΄ μΈν°νμ΄μ€κ° μμν λͺ¨λ λ©μλ νΈμΆ κ°λ₯
iClass.myMethod();
iClass.x();
iClass.y();
}
}
<μ€ν κ²°κ³Ό>
μμ±ν ν΄λμ€λ μμ μΈν°νμ΄μ€νμΌλ‘ λ³νν μ μλ€. λ€λ§ μμ μΈν°νμ΄μ€λ‘ ν λ³νμ νλ©΄ μμ μΈν°νμ΄μ€μ μ μΈν λ©μλλ§ νΈμΆν μ μλ€.
μμ λ₯Ό 보면 mClassκ° MyClassλ‘ μμ±λμμ΄λ, X μΈν°νμ΄μ€νμΌλ‘ μ μΈν xClassμ λμ λλ©΄ xClassκ° νΈμΆν μ μλ λ©μλλ Xμ λ©μλμΈ x( )λΏμ΄λ€.
μΈν°νμ΄μ€λ₯Ό μ μν λ κΈ°λ₯μ κ³μΈ΅ κ΅¬μ‘°κ° νμν κ²½μ°μ μμμ μ¬μ©νκΈ°λ νλ€.
'Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java-κΈ°μ΄] Object ν΄λμ€ (0) | 2021.02.21 |
---|---|
[Java-κΈ°μ΄] μΈν°νμ΄μ€ μμ (0) | 2021.02.21 |
[Java] μ μ λ©μλ (0) | 2021.02.21 |
[Java] λν΄νΈ λ©μλ (0) | 2021.02.20 |
[Java] μΈν°νμ΄μ€μ λ€νμ± (0) | 2021.02.20 |
λκΈ