인터페이스 (자바)

위키백과, 우리 모두의 백과사전.
둘러보기로 가기 검색하러 가기

인터페이스(interface)는 자바 프로그래밍 언어에서 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형이다. 이들은 프로토콜과 비슷하다. 인터페이스는 interface라는 키워드를 사용하여 선언하며, 메소드 시그너처와 상수 선언(staticfinal이 둘 다 선언되는 변수 선언)만을 포함할 수 있다. 자바 8 미만의 모든 버전을 기준으로 인터페이스의 모든 메소드는 구현체(메소드 바디)를 포함하고 있지 않다. 자바 8부터, defaultstatic 메소드는 interface 정의에 구현체를 가지고 있을 수 있다.[1]

사용법[편집]

인터페이스 정의[편집]

인터페이스들은 다음의 구문을 사용하여 정의된다.

[visibility] interface InterfaceName [extends other interfaces] {
        constant declarations
        abstract method declarations
}

예: public interface Interface1 extends Interface2;

인터페이스의 바디(body)는 추상 메소드를 포함하고 있지만 인터페이스 내의 모든 메소드들이 정의상 추상적이기 때문에 abstract 키워드가 필요하지 않다. 인터페이스는 노출된 행동들의 집합을 규정하므로 모든 메소드들은 암묵적으로 public이다.

그러므로 단순한 인터페이스는 다음과 같이 될 수 있다.

public interface Predator {
       boolean chasePrey(Prey p);
       void eatPrey(Prey p);
}

클래스에서의 인터페이스 구현[편집]

인터페이스 구현 문법은 다음 공식을 사용한다:

... implements InterfaceName[, another interface, another, ...] ...

클래스는 인터페이스를 구현할 수 있다. 이를테면 다음과 같다.

public class Lion implements Predator {

        @Override
        public boolean chasePrey(Prey p) {
               // programming to  chase prey p (specifically for a lion)
        }

        @Override
        public void eatPrey(Prey p) {
               // programming to eat prey p (specifically for a lion)
        }
}

클래스가 인터페이스를 구현하면서 메소드를 모두 구현하지 않는다면, abstract로 표시되어야 한다. 클래스가 추상적이라면 서브클래스들 중 하나가 미구현 메소드를 구현할 것이라 예측한다. 추상 클래스의 서브클래스들 중 어느 것도 인터페이스 메소드를 모두 구현하지 않더라도 서브클래스 자체는 abstract로 다시 표시되어야 한다.

클래스들은 여러 인터페이스들을 구현할 수 있다.

 public class Frog implements Predator, Prey { ... }

인터페이스들은 일반적으로 콜백을 목적으로 자바 언어에서 사용된다.[2] 자바는 메소드(프로시저)를 인수(argument)로 전달하는 것을 허용하지 않는다.

서브인터페이스[편집]

인터페이스들은 아래와 같은 동일 공식을 사용하여 기타 여러 인터페이스들을 확장(extend)할 수 있다. 이를테면, 다음은

 public interface VenomousPredator extends Predator, Venomous {
         //interface body
 }

유효한 문법이며 서브인터페이스를 정의한다.

각주[편집]

  1. “Default Methods”. 2017년 5월 23일에 원본 문서에서 보존된 문서. 2017년 4월 27일에 확인함. 
  2. “Java World”. 2008년 9월 16일에 원본 문서에서 보존된 문서. 2017년 3월 28일에 확인함. 

외부 링크[편집]