Live Study - Java Interface
μΈν°νμ΄μ€λ₯Ό μ μνλ λ°©λ²
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/