-
Live Study - Java InterfaceHello, World π»/Java βοΈ 2021. 1. 7. 21:14
μΈν°νμ΄μ€λ₯Ό μ μνλ λ°©λ²
public interface μΈν°νμ΄μ€λͺ { public static final νμ μμλ³μλͺ = κ°; // public static final μλ΅ κ°λ₯ public abstract λ°ννμ λ©μλλͺ (); // public abstarct μλ΅ κ°λ₯ static λ°ννμ λ©μλλͺ () { } default λ°ννμ λ©μλλͺ () { } private λ°ννμ λ©μλλͺ () { } private static λ°ννμ λ©μλλͺ () { } }
μΈν°νμ΄μ€μλ
- μμ
- abstract method (Java 7 λΆν°)
- static method (Java 8 λΆν°)
- default method (Java 8 λΆν°)
- private method (Java 9 λΆν°)
- private static method (Java 9 λΆν°)
μμ 6κ°μ§ νλͺ©μ Java λ²μ μ λ°λΌ μ 곡νλ€.
- μΈν°νμ΄μ€λ interface ν€μλλ₯Ό μ¬μ©ν΄ μ μνλ€. ν΄λμ€μ λ§μ°¬κ°μ§κ³ public, default μ κ·Όμ μ΄μλ₯Ό μ μ©ν μ μλ€.
- λͺ¨λ μμλ public static final μΌλ‘ μ μΈλμ΄μΌ νκ³ , μλ΅ν μ μλ€. μλ΅λ μ μ΄μλ μ»΄νμΌλ¬κ° μλμΌλ‘ μΆκ°ν΄μ€λ€.
- λͺ¨λ λ©μλλ public abstract μ΄μ΄μΌ νκ³ , μλ΅ν μ μλ€. μμ μ»΄νμΌλ¬κ° μλμΌλ‘ μΆκ°ν΄μ€λ€.μΈν°νμ΄μ€λ₯Ό ꡬννλ λ°©λ²
ν΄λμ€λ₯Ό μμ λ°κΈ° μν΄μ λΆλͺ¨ ν΄λμ€λ₯Ό μ νν΄ extends ν€μλλ₯Ό λΆμ¬ μ μΈνλ―μ΄, μΈν°νμ΄μ€λ₯Ό ꡬννκΈ° μν΄μλ implements ν€μλλ₯Ό μ¬μ©ν΄ μ μΈνλ©΄ λλ€.
interface Movable { void walk(); void run(); } class Character implements Movable { @Override public void walk() { } @Override public void run() { } }
ν΄λμ€λ₯Ό μμλ°μ λλ 1κ°μ ν΄λμ€λ§ μμμ΄ κ°λ₯νλλ°, μΈν°νμ΄μ€λ μ¬λ¬κ°λ₯Ό ꡬνν μ μλ€.
interface Flyable { void fly(); } class Character implements Movable, Flyable { @Override public void walk() { } @Override public void run() { } @Override public void fly() { } }
μ΅λͺ ν΄λμ€λ₯Ό μ΄μ©ν μΈν°νμ΄μ€ ꡬν
Java λ μ΅λͺ ν΄λμ€λΌλ κ²μ΄ μλ€. μ΄λ¦μ΄ μλ ν΄λμ€λΌκ³ ν΄μ μ΅λͺ ν΄λμ€λΌκ³ νκ³ , μΌνμ© ν΄λμ€λ‘ μ°μΈλ€. ν΄λμ€μ μ μΈκ³Ό κ°μ²΄μ μμ±μ λμμ νλ κ²μ΄λ€.
interface Movable { void walk(); void run(); } public class Main { public static void main(String[] args) { Movable movable = new Movable() { @Override public void walk() { } @Override public void run() { } }; } }
μ΅λͺ ν΄λμ€λ μμ±μλ₯Ό κ°μ§ μ μλ€. λ¨ νλμ ν΄λμ€λ₯Ό μμλ°κ±°λ, λ¨ νλμ μΈν°νμ΄μ€λ§μ ꡬνν μ μλ€.μΈν°νμ΄μ€ μμ
μΈν°νμ΄μ€λ μΈν°νμ΄μ€λ‘λΆν°λ§ μμ λ°μ μ μλ€. κ·Έλ¦¬κ³ ν΄λμ€μλ λ€λ₯΄κ² μΈν°νμ΄μ€λ λ€μ€ μμ λ°μ μ μλ€.
extends ν€μλλ₯Ό μ¬μ©ν΄ λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό μμ λ°μ μ μλ€.interface InterfaceA { void methodA(); } interface InterfaceB { void methodB(); } interface InterfaceC extends InterfaceA, InterfaceB { void methodC(); }
InterfaceC μΈν°νμ΄μ€λ₯Ό ꡬννλ©΄ InterfaceA, B, C μ μλ λ©μλλ₯Ό λͺ¨λ ꡬνν΄μΌ νλ€.class ClassA implements InterfaceC { @Override public void methodA() { } @Override public void methodB() { } @Override public void methodC() { } }
μΈν°νμ΄μ€ λ νΌλ°μ€λ₯Ό ν΅ν΄ ꡬν체λ₯Ό μ¬μ©νλ λ°©λ²
μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ μΈν°νμ΄μ€μ λΆλͺ¨ - μμ κ΄κ³λΌκ³ ν μ μκΈ° λλ¬Έμ,
ν΄λΉ μΈν°νμ΄μ€ νμ μ μ°Έμ‘°λ³μλ‘ μ΄λ₯Ό ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€.interface InterfaceA { void methodA(); } interface InterfaceB { void methodB(); } interface InterfaceC extends InterfaceA, InterfaceB { void methodC(); } class ClassA implements InterfaceC { @Override public void methodA() { } @Override public void methodB() { } @Override public void methodC() { } }
public class Main { public static void main(String[] args) { InterfaceA interfaceA = new ClassA(); interfaceA.methodA(); InterfaceB interfaceB = new ClassA(); interfaceB.methodB(); InterfaceC interfaceC = new ClassA(); interfaceC.methodA(); interfaceC.methodB(); interfaceC.methodC(); } }
λΉμ°ν, μ°Έμ‘°λ³μμ νμ μ λ°λΌ μ°Έμ‘°ν μ μλ λ©€λ²λ λ¬λΌμ§λ€.μΈν°νμ΄μ€μ κΈ°λ³Έ λ©μλ (Default Method), μλ° 8
JDK 1.8 λΆν° μΈν°νμ΄μ€μ Default Method λ₯Ό μΆκ°ν μ μκ² λμλ€.
public interface μΈν°νμ΄μ€λͺ { default λ°ννμ λ©μλλͺ () { } }
μΈν°νμ΄μ€μ λ©μλλ₯Ό νλ μΆκ°νλ€λ κ²μ ν΄λΉ μΈν°νμ΄μ€λ₯Ό ꡬνν κΈ°μ‘΄μ λͺ¨λ ν΄λμ€λ€μ΄ μλ‘ μΆκ°λ λ©μλλ₯Ό ꡬνν΄μΌνλ€λ κ²μ΄λ€.
μΈν°νμ΄μ€κ° λ³κ²½λμ§ μμΌλ©΄ κ°μ₯ μ’κ² μ§λ§, μ무리 μ€κ³λ₯Ό μν΄λ μΈμ κ° λ³κ²½μ λ°μνκΈ° λλ¬Έμ, κ²°κ΅ Default Method λ νμ νΈνμ±μ μν΄μ κ³ μλ κ²μ΄λ€.
Default Method λ ꡬν체λ₯Ό μ 곡νλ κ²μ΄κ³ , μΆμ λ©μλκ° μλκΈ° λλ¬Έμ ν΄λΉ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ€μ λ³κ²½νμ§ μμλ λλ€.
μλλ μ΄νν°λΈ μλ°μμ λμ¨ λν΄νΈ λ©μλμ λν λ΄μ©μ΄λ€.μ΄νν°λΈ μλ° Item 20 μ°Έκ³ , 'μΆμ ν΄λμ€λ³΄λ€λ μΈν°νμ΄μ€λ₯Ό μ°μ νλΌ'
... λν΄νΈ λ©μλλ₯Ό μ 곡ν λλ μμνλ €λ μ¬λμ μν μ€λͺ μ λ¬Έμν ν΄μΌνλ€. (@implSpec μ¬μ©)
... λ§μ μΈν°νμ΄μ€κ° equals, hashCode μ κ°μ Object μ λ©μλλ₯Ό μ μνκ³ μμ§λ§, μ΄λ€μ λν΄νΈ λ©μλλ‘ μ 곡ν΄μλ μλλ€.
μ΄νν°λΈ μλ° Item 21 μ°Έκ³ , 'μΈν°νμ΄μ€λ ꡬννλ μͺ½μ μκ°ν΄ μ€κ³νλΌ'
... λν΄νΈ λ©μλλ₯Ό μ μΈνλ©΄, κ·Έ μΈν°νμ΄μ€λ₯Ό ꡬνν ν λν΄νΈ λ©μλλ₯Ό μ¬μ μνμ§ μμ λͺ¨λ ν΄λμ€μμ λν΄νΈ ꡬνμ΄ μ°μ΄κ² λλ€. μ΄μ²λΌ μλ°μλ κΈ°μ‘΄ μΈν°νμ΄μ€μ λ©μλλ₯Ό μΆκ°νλ κΈΈμ΄ μ΄λ Έμ§λ§ λͺ¨λ κΈ°μ‘΄ ꡬν체λ€κ³Ό 맀λλ½κ² μ°λλ리λΌλ 보μ₯μ μλ€. μλ° 7 κΉμ§μ μΈμμμλ λͺ¨λ ν΄λμ€κ° "νμ¬μ μΈν°νμ΄μ€μ μλ‘μ΄ λ©μλκ° μΆκ°λ μΌμ μμν μλ€"κ³ κ°μ νκ³ μμ±λμΌλ λ§μ΄λ€. λν΄νΈ λ©μλλ ꡬν ν΄λμ€μ λν΄ μ무κ²λ λͺ¨λ₯Έ μ± ν©μ μμ΄ λ¬΄μμ 'μ½μ ' λ λΏμ΄λ€.
... νμ§λ§ μκ°ν μ μλ λͺ¨λ μν©μμ λΆλ³μμ ν΄μΉμ§ μλ λν΄νΈ λ©μλλ₯Ό μμ±νκΈ°λ μ΄λ €μ΄ λ²μ΄λ€.
... λν΄νΈ λ©μλλ μ»΄νμΌμ μ±κ³΅νλλΌλ κΈ°μ‘΄ ꡬν체μ λ°ν°μ μ€λ₯λ₯Ό μΌμΌν¬ μ μλ€.
μΈν°νμ΄μ€λ₯Ό μ€κ³λ μΈμ λ λ§μ κ²μ κ³ λ €νκ³ μκ°ν΄μ ν΄μΌνλ κ² κ°λ€.μΈν°νμ΄μ€μ static λ©μλ, μλ° 8
JDK 1.8 λΆν° μΈν°νμ΄μ€μ Static Method λ₯Ό μΆκ°ν μ μκ² λμλ€. static λ©μλλ μΈμ€ν΄μ€μ κ΄κ³κ° μλ λ 립μ μΈ λ©μλμ΄κΈ° λλ¬Έμ μμ λΆν° μΈν°νμ΄μ€μ μΆκ°νμ§ λͺ»ν μ΄μ κ° μμλ€.
public interface μΈν°νμ΄μ€λͺ { static λ°ννμ λ©μλλͺ () { } }
μλ°μ μ μ μ°Έκ³
... μλ°λ₯Ό λ³΄λ€ μ½κ² λ°°μΈ μ μλλ‘ κ·μΉμ λ¨μν ν νμκ° μμ΄μ μΈν°νμ΄μ€μ λͺ¨λ λ©μλλ μΆμ λ©μλμ΄μ΄μΌ νλ€λ κ·μΉμ μμΈλ₯Ό λμ§ μμλ€. λλΆμ μΈν°νμ΄μ€μ κ΄λ ¨λ static λ©μλλ λ³λμ ν΄λμ€μ λ°λ‘ λμ΄μΌ νλ€.
λνμ μΈ μλ‘ java.util.Collection μΈν°νμ΄μ€κ° μλ€. static λ©μλλ₯Ό μΆκ°ν μ μμκΈ° λλ¬Έμ λ³λμ Collections λΌλ ν΄λμ€μ λ€μ΄κ°κ² λμλ€. λ§μ½ μΈν°νμ΄μ€μ static λ©μλλ₯Ό μΆκ°ν μ μμλ€λ©΄, Collections ν΄λμ€λ μ‘΄μ¬νμ§ μμμ κ²μ΄λ€.(μ΄λ° μ΄μ κ°!!)μΈν°νμ΄μ€μ private λ©μλ, μλ° 9
μλ° 9 λΆν° μΈν°νμ΄μ€μ private method, static private method λ₯Ό μΆκ°ν μ μλ€.
private λ©μλλ₯Ό μΆκ°ν¨μΌλ‘μ¨ μΈν°νμ΄μ€ λ΄λΆμμ μ½λ μ¬μ¬μ©μ±μ λμΌ μ μκ² λμλ€. μΈλΆμ λ©μλλ₯Ό λ ΈμΆμν¬ νμ μμ΄ λν΄νΈ λ©μλμμ μ½λλ₯Ό 곡μ ν΄ μ¬μ©ν μ μλ€.interface MyInterface { default void methodA() { calculateSomething(); } default void methodB() { calculateSomething(); } private void calculateSomething() { } }
private λ©μλλ 4κ°μ§ κ·μΉμ΄ μλ€.
1. Private interface method λ μΆμ λ©μλκ° λ μ μλ€. λ©μλλ₯Ό μ μν΄λμΌ νλ€.
2. Private method λ μΈν°νμ΄μ€ λ΄λΆμμλ§ μ¬μ©λ μ μλ€.
3. Private static method λ λ€λ₯Έ static λ©μλ, non-static λ©μλμμ μ¬μ©λ μ μλ€.
4. Private non-static methods λ private static methods λ΄λΆμμ μ¬μ©λ μ μλ€.References
μλ°μ μ μ (www.yes24.com/Product/Goods/24259565)
μ΄νν°λΈ μλ° (www.yes24.com/Product/Goods/65551284)
howtodoinjava.com/java9/java9-private-interface-methods/'Hello, World π» > Java βοΈ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Live Study - Java Exception (0) 2021.01.23 Live Study - Java Package (0) 2020.12.30 Live Study - Java μμ (Inheritance) (0) 2020.12.23 Live Study - Java μ Class (0) 2020.12.14 Live Study - Java μ νλ¬Έ, λ°λ³΅λ¬Έ (0) 2020.12.06