Interface

하나의 시스템을 구성하는 2개의 구성요소(하드웨어, 소프트웨어) 또는 2개의 시스템이 상호작용할 수 있도록 접속되는 경계(boundary), 이 경계에서 상호 접속하기 위한 하드웨어, 소프트웨어, 조건, 규약 등을 포괄적으로 가리키는 말

자바에서 인터페이스는 여러가지 역할로 사용한다.

  • 개발자 사이의 코드 규약을 정한다.
  • 여러 구현체에서 공통적인 부분을 추상화한다.(다형성)

자바 인터페이스는 기본적으로 추상 메소드의 모음이다. 추상메소드는 아래와 같이 구현부가 없는 메소드를 말한다.

public interface Walkable {
void walk();
}

구현부가 없으므로 인터페이스를 만든다면 반드시 구현하는 클래스를 만들어야 하며, 인터페이스를 구현하기로 한 클래스는 반드시 인터페이스에 명시되어 있는 추상메소드들을 모두 구현해야 한다. 만약 이를 구현하지 않으면 컴파일 에러가 발생한다.

public class Dog implements Walkable {
// ...
@Override
public void walk() {
    // ...
    }
}

인터페이스는 구현과 상속을 모두 할 수 있다.

  • 인터페이스를 사용하는 구체 클래스는 해당인터페이스를 구현해야한다.
  • 인터페이스 사이에는 상속을 할 수 있다.

인터페이스를 사용하면 다중 상속이 가능하다. 인터페이스 사이에서도, 구체 클래스에서도 여러 인터페이스를 구현 및 상속할 수 있다.

public interface Walkable {
void walk();
}

public interface Flyable {
void fly();
}

public interface Moveable extends Walkable, Flyable {
}
    public class Bat implements Moveable {
@Override
public void walk() {
    // ...
}

@Override
public void fly() {
    // ...
}
}

인터페이스는 클래스와 달리 기본 접근제어자는 public이다.
인터페이스에 필드 변수를 선언하면 public static final로 선언해야 하며, 이 것도 기본 설정되어 있다.

인터페이스를 사용하는 이유

인터페이스를 사용하는 주된 이유는 다형성을 위해서이다. 다형성은 상속받은 클래스 또는 인터페이스의 메소드를 재정의하여 서로 다른 행동을 만들 수 있다. 상속을 통해 상위 클래스의 타입으로 통일한 후 하위 클래스들을 하나의 타입으로 관리할 수 있다. 이를 사용해서 변경에 유연한 코드를 만들 수 있다.