8.1 인터페이스 역할

인터페이스는 두 객체를 연결하는 역할을 함.

image.png

객체 A가 인터페이스의 메소드를 호출하면, 인터페이스는 객체 B의 메소드를 호출하고 그 결과를 받아 객체 A로 전달함.

image.png

객체 A가 인터페이스의 메소드를 호출하면 실제로 실행되는 것은 인터페이스 뒤편의 객체 B 또는 객체 C의 메소드임. 만약 객체 B의 메소드 실행 결과와 객체 C의 메소드 실행 결과가 다르면, 객체 A는 객체 교체로 인해 다른 결과를 얻게됨.

이 특징으로 인해 인터페이스는 다형성 구현에 주된 기술로 이용됨.

8.2 인터페이스와 구현 클래스 선언

인터페이스는 ‘~.java’ 형태의 소스 파일로 작성되고 ‘~.class’ 형태로 컴파일되기 때문에 물리적 형태는 클래스와 동일함. 단, 소스를 작성할 때 선언하는 방법과 구성 멤버가 클래스와 다름.

인터페이스 선언

인터페이스 선언 class 키워드 대신 interface 키워드를 사용함. 접근 제한자로는 클래스와 마찬가지로 같은 패키지 내에서만 사용 가능한 default, 패키지와 상관없이 사용하는 public을 붙일 수 있음.

interface 인터페이스명 { ... } //default 접근 제한
public interface 인터페이스명 { ... } //public 접근 제한

중괄호 안에는 인터페이스가 가지는 멤버들을 선언할 수 있는데, 다음과 같은 종류가 있음.

public interface 인터페이스명 {
	//public 상수 필드
	//public 추상 메소드
	//public 디폴트 메소드
	//public 정적 메소드
	//private 메소드
	//private 정적 메솓,
}

구현 클래스 선언

객체 A가 인터페이스의 추상 메소드를 호출하면 인터페이스는 객체 B의 메소드를 실행함. 그렇다면 객체 B는 인터페이스에 선언된 추상 메소드와 동일한 선언부를 가진 메소드를 가지고 있어야함.

image.png

여기서 객체 B를 인터페이스를 구현한 객체라고 함. 인터페이스에 정의된 추상 메소드에 대한 실행 내용이 구현되어 있기 때문임. 객체 B와 같은 구현 객체는 다음과 같이 인터페이스를 구현하고 있음을 선언부에 명시해야 함.

public class B implements 인터페이스명 { ... }

implements 키워드는 해당 클래스가 인터페이스를 통해 사용할 수 있다는 표시이며, 인터페이스의 추상 메소드를 재정의한 메소드가 있다는 뜻임.