<aside>
</aside>
사전적으로는 “서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면” 이라고 한다. 이는 Java에서도 마찬가지라고 생각한다. 인터페이스의 메서드를 구현해야 하는 강제성을 부여할 뿐만 아니라, 다양한 프레임워크에서 클래스끼리 통신하기 위해 사용하는 중간 출입문 역할을 하는 데 쓰이기 때문이다.
인터페이스를 작성하는 것은 앞선 추상 클래스(Abstract)의 용도 이해하기 와 같다. 인터페이스에 메서드를 정의하면 자식 클래스에서는 반드시 이를 구현해야 한다.
필드를 선언할 땐 static
과 상수(final)
로 선언된다.
따라서 메서드에는 abstract가 붙을 것이고, 필드에는 static final이 붙을 것이다. Java는 이를 작성하지 않아도 자동으로 public abstract
, public static final
이 자동으로 생략된다.
// 인터페이스 -> 클래스
public interface Car {
(public static final) int MAX_SPEED = 200;
(public abstract) void run();
}
public class Santafe implements Car {
@Override
public void run() {
System.out.println("Santafe run");
}
}
// Test
Santafe santafe = new Santafe();
santafe.run();
System.out.println(Car.MAX_SPEED);
인터페이스는 그 자체로 인스턴스화될 수 없으며, implements
키워드를 통해 구현하는 클래스가 필요하다.
자식 클래스에서 인터페이스 메서드를 구현할 때는 접근 제어자가 더 커야하기 때문에, 인터페이스 메서드는 기본적으로 public
이므로 구현체 메서드도 public
이 된다.
추상 클래스와 달리 다중 구현이 가능하며 다른 클래스를 extends
로 상속하며 구현까지 가능하다.
public class TeslaY3 extends Musk implements Car, Electric {
...
}