-
[Java] μλ° μΈν°νμ΄μ€(Interface) μ¬μ©Android/Java 2021. 1. 24. 02:47λ°μν
- μ΄ κΈμ "μλ° μ¨λΌμΈ μ€ν°λ" λ΄μ©μ 곡λΆνμ¬ μμ±νμμ΅λλ€.
μΈν°νμ΄μ€(Interface)λ?
νμ μμ μμ€μ½λ μμ± μ ν΄λμ€λ₯Ό μ²μλΆν° ꡬννκ² λλ€λ©΄ μ½λμ κ°λ μ±λ λ¨μ΄μ§κ³ μκ°λ μ€λ걸릴 κ²μ λλ€. λν νλ³λ‘ κ°κ° λ€λ₯Έ λͺ¨λμ λ§λ€ μ νλ§λ€ λ°©λ²μ΄ λ€λ₯΄κΈ° λλ¬Έμ μλ‘ νΈνμ±μ΄ μκ³ μΌκ΄μ±μ΄ λ¨μ΄μ§κ² λ©λλ€.
μΈν°νμ΄μ€λ₯Ό ν΅ν΄ κΈ°λ³Έμ μΌλ‘ ꡬνν΄μΌ ν λ©μλμ λν κ·κ²©λ€μ μλ €μ€λ€λ©΄ ν¨μ¬ ν¨μ¨μ μΌ κ²μ λλ€.
μ¦, μΈν°νμ΄μ€λ νΉμ κΈ°λ₯μ κ°λ°νλλ° μμ΄ κ³΅ν΅μ μΈ κΈ°λ₯μ λͺ μνκ³ κ°μ μ μΌλ‘ ꡬννκ²λ νλ μν μ λλ€.
μΈν°νμ΄μ€λ₯Ό μ¬μ©νκ² λλ€λ©΄ μλ°μ λ€νμ±μ μ΄μ©ν μ μκ³ μ΄λ₯Ό ν΅ν΄ μ μ§λ³΄μμ±μ λμΌ μ μμ΅λλ€.
μΈν°νμ΄μ€ μ μ
public interface Phone { int version = 12; String getManufacturer(); String getOS(); }
- μΈν°νμ΄μ€λ interfaceλΌλ ν€μλλ₯Ό μ¬μ©ν΄μ μ μν μ μμ΅λλ€.
- μ κ·Όμ μ΄μλ‘ public λλ defaultκ° λͺ μλ μ μμ΅λλ€.
- μΈν°νμ΄μ€μ λ³μμ κ°μ "public static final" ν€μλκ° μλ΅λ μμμ΄λ―λ‘ μ£Όμ΄μ§ κ°μΌλ‘λ§ μ¬μ©κ°λ₯ ν©λλ€.
- getManufactureκ³Ό getOSλ "public abstract" ν€μλκ° μλ΅λ λ©μλλ‘ μΈν°νμ΄μ€λ₯Ό ꡬννλ κ³³μμ μ€λ²λΌμ΄λ©μ κ°μ μν΅λλ€.
μΈν°νμ΄μ€ ꡬν
public class IPhone implements Phone{ @Override public String getManufacturer() { return "Apple"; } @Override public String getOS() { return "MacOS"; } }
public class Galaxy implements Phone{ @Override public String getManufacturer() { return "Samsung"; } @Override public String getOS() { return "Android"; } }
- μΈν°νμ΄μ€ ꡬνμ implements ν€μλλ₯Ό ν΅ν΄ μΌλ° ν΄λμ€μμ μΈν°νμ΄μ€λ₯Ό ꡬνν©λλ€.
- IPhone ν΄λμ€μ Galaxy ν΄λμ€λ Phone μΈν°νμ΄μ€μ κ·κ²©μ λ§κ² μ¬μ μνκ³ μμ΅λλ€.
μΈν°νμ΄μ€ λ νΌλ°μ€λ₯Ό ν΅ν΄ ꡬν체 μ¬μ©νλ λ°©λ²
public class Main { public static void main(String[] args) { Phone galaxy= new Galaxy(); Phone iphone = new IPhone(); System.out.println(galaxy.getManufacturer()); System.out.println(galaxy.getOS()); System.out.println(iphone.getManufacturer()); System.out.println(iphone.getOS()); } }
- μλ°μ λ€νμ±μ μ΄μ©νμ¬ μΈν°νμ΄μ€ μ°Έμ‘°λ³μλ‘ λ€μν ν΄λμ€λ₯Ό ννν μ μμ΅λλ€.
- μμμμ 보λ κ²μ²λΌ Phone μΈν°νμ΄μ€ μ°Έμ‘°λ³μμ Galaxy ν΄λμ€μ IPhone ν΄λμ€λ‘ μ¬λ¬ νμ μ κ°μ²΄λ‘ μ°Έμ‘°ν μ μμ΅λλ€.
μΈν°νμ΄μ€ μμ
- μΈν°νμ΄μ€λ λ€μ€ μμμ΄ κ°λ₯νμ¬ μ¬λ¬ μΈν°νμ΄μ€λ₯Ό μμλ°μ νλμ μΈν°νμ΄μ€λ₯Ό λ§λ€ μ μμ΅λλ€.
- μ΄λ΄κ²½μ° λͺ¨λ μΈν°νμ΄μ€μ μ‘΄μ¬νλ λ©μλλ₯Ό μ¬μ μ ν΄μΌ ν©λλ€.
public interface Phone { int version = 12; String getManufacturer(); String getOS(); } public interface Watch { String getAppearance(); } public interface Device extends Phone,Watch{ }
public class Machine implements Device{ @Override public String getManufacturer() { return null; } @Override public String getOS() { return null; } @Override public String getAppearance() { return null; } }
- Phoneκ³Ό Watch μΈν°νμ΄μ€λ₯Ό μμλ°μ Device μΈν°νμ΄μ€λ₯Ό μμ±νμμ΅λλ€.
- Device μΈν°νμ΄μ€λ₯Ό ꡬννλ μΌλ° ν΄λμ€μμλ Phoen μΈν°νμ΄μ€μ Watch μΈν°νμ΄μ€μ μλ λ©μλλ€μ λͺ¨λ ꡬνν΄μΌλ§ ν©λλ€.
μΈν°νμ΄μ€ κΈ°λ³Έ λ©μλ(Default Method)
- μλ° 8 μ΄μ μ μΈν°νμ΄μ€μλ₯Ό μ μν λλ λ©μλλ₯Ό μ μΈλ§ ν λΏ λ΄λΆμμ ꡬνλλ μ½λλ μμμ΅λλ€.
- νμ§λ§ μλ° 8 μ΄ν default λ©μλλ₯Ό μ΄μ©νλ©΄ μΈν°νμ΄μ€ λ΄λΆμμ μ½λκ° μ‘΄μ¬ν μ μμμ΅λλ€.
- default λ©μλλ μ€λ²λΌμ΄λ©μ΄ κ°μ μ μ΄ μλ μ νμ μ΄λΌμ μ€λ²λΌμ΄λ©μ νμ§ μμ μ κΈ°λ³Έ ꡬνλ μ½λκ° μ€νλ©λλ€.
- default ν€μλλ 무쑰건 λͺ μν΄μΌ ν©λλ€.
- νμνΈνμ±μ μν΄ μ£Όλ‘ μ¬μ©νλ€κ³ ν©λλ€.
public interface Phone { int version = 12; String getManufacturer(); String getOS(); default void printRing(){ System.out.println("Sound : Ring Ring~~"); } }
public class Galaxy implements Phone{ @Override public String getManufacturer() { return "Samsung"; } @Override public String getOS() { return "Android"; } @Override public void printRing() { System.out.println("Sound : Ring~~~~~~~"); } }
- Phone μΈν°νμ΄μ€μ printRingμ΄λΌλ default λ©μλλ₯Ό λ§λ€μμ΅λλ€.
- μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€μμ μ νμ μΌλ‘ μ€λ²λΌμ΄λ©μ ν μ μκ³ Galaxy ν΄λμ€μμλ μ¬μ μλ₯Ό, Iphone ν΄λμ€μμλ κ·Έλλ‘ μ¬μ©νμμ΅λλ€.
public class Main { public static void main(String[] args) { Phone galaxy= new Galaxy(); Phone iphone = new IPhone(); System.out.println(galaxy.getManufacturer()); System.out.println(galaxy.getOS()); galaxy.printRing(); System.out.println(); System.out.println(iphone.getManufacturer()); System.out.println(iphone.getOS()); iphone.printRing(); } }
μΈν°νμ΄μ€ static λ©μλ(μλ° 8)
- μλ° 8μ΄νμ default λ©μλμ λ§μ°¬κ°μ§λ‘ static methodλ μΆκ°λμμ΅λλ€.
- static methodλ μΈμ€ν΄μ€ μμ± μμ΄ μΈν°νμ΄μ€ μ΄λ¦μ ν΅ν΄μ μ§μ λ©μλ νΈμΆμ΄ κ°λ₯ν©λλ€.
- μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€μμ μ¬μ μκ° λΆκ°λ₯ν©λλ€.
public interface Phone { int version = 12; String getManufacturer(); String getOS(); default void printRing(){ System.out.println("Sound : Ring Ring~~"); } static void printUser(String user){ System.out.println("User : "+user); } }
public class Main { public static void main(String[] args) { Phone galaxy= new Galaxy(); Phone iphone = new IPhone(); System.out.println(galaxy.getManufacturer()); System.out.println(galaxy.getOS()); galaxy.printRing(); System.out.println(); System.out.println(iphone.getManufacturer()); System.out.println(iphone.getOS()); iphone.printRing(); // static λ©μλ μ¬μ© Phone.printUser("Hong Gil Dong"); } }
μΈν°νμ΄μ€ private λ©μλ(μλ° 9)
- μλ° 8 μ΄ν μΈν°νμ΄μ€ λ΄λΆμμ μ½λλ₯Ό ꡬννλ κ²μ΄ μΆκ°λμμ΅λλ€.
- μ½λ ꡬν μ 볡μ‘ν μ½λλ₯Ό ν λ²μ ꡬννλ κ²λ³΄λ€λ μμ λ©μλλ₯Ό μμ±νμ¬ λ³΅μ‘ν λ©μλλ₯Ό ꡬννλ κ²μ΄ μ¬μ¬μ©, μ μ§λ³΄μ μΈ‘λ©΄μμ ν¨μ¨μ μ λλ€.
- private λ©μλλ₯Ό μ΄μ©νμ¬ μμ λ©μλλ₯Ό ꡬννλ μΈλΆμμ λ³Ό μ μκ³ μ¬μ©ν μ μλλ‘ ν κ² λ§λλ λ©μλμ λλ€.
public interface Phone { int version = 12; String getManufacturer(); String getOS(); default void printRing(){ // private λ©μλ μ¬μ© printInfo(); System.out.println("Sound : Ring Ring~~"); } static void printUser(String user){ // static private λ©μλ μ¬μ© getUser(user); } private void printInfo(){ System.out.println("Print Information"); } private static void getUser(String user){ System.out.println("User : "+user); } }
public class Main { public static void main(String[] args) { Phone galaxy= new Galaxy(); Phone iphone = new IPhone(); System.out.println(galaxy.getManufacturer()); System.out.println(galaxy.getOS()); galaxy.printRing(); System.out.println(); System.out.println(iphone.getManufacturer()); System.out.println(iphone.getOS()); iphone.printRing(); Phone.printUser("Hong Gil Dong"); } }
μΆμν΄λμ€μ μΈν°νμ΄μ€ λΉκ΅
μΈν°νμ΄μ€λ νΉμ κΈ°λ₯μ ꡬννκΈ° μν νμ κ·κ²©μ μ£Όλ κ²μΌλ‘ μΆμν΄λμ€λ λ―Έμμ± μ€κ³λ, μΈν°νμ΄μ€λ κΈ°λ³Έ μ€κ³λλΌκ³ 보μλ©΄ λ©λλ€.
λͺ¨λ ν΄λμ€λ₯Ό μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ€λ©΄ 곡ν΅λ κΈ°λ₯μ λͺ¨λ ꡬνν΄μΌ νκΈ° λλ¬Έμ λ²κ±°λ‘μ΄ μμ μ λλ€. μ΄λ΄κ²½μ° μΆμν΄λμ€λ₯Ό μ΄μ©ν΄μΌ ν©λλ€.
νμ§λ§, μΆμν΄λμ€λ§ μ¬μ©νκΈ°μλ λ€μ€μμμ΄ λΆκ°νκΈ° λλ¬Έμ κ°κ° λ€λ₯Έ μΆμν΄λμ€λ₯Ό ꡬννλλ° κ³΅ν΅λ κΈ°λ₯μ΄ μ‘΄μ¬ν κ²½μ°λ μΈν°νμ΄μ€κ° νμν©λλ€.
λ°μν'Android > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μλ° μ°λ λ μμ±(Thread, Runnable) (4) 2021.02.02 [Java] μλ° μμΈμ²λ¦¬ (0) 2021.02.01 [Java] μλ° ν¨ν€μ§λ? (0) 2021.01.19 [Java] μΆμ ν΄λμ€, Dispatch, final, Object ν΄λμ€ (0) 2021.01.18 [Java] μλ° ν΄λμ€ μμ, λ©μλ μ€λ²λΌμ΄λ© (0) 2021.01.18