자바에서 인터페이스는 객체의 사용 방법을 정의한 타입이다.
인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구현하는 매우 중요한 역할을 한다.
인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. 그렇기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 된다.
개발코드가 직접 객체의 메소드를 호출하면 간단한데, 왜 중간에 인터페이스를 두는지 의문점이 생길수도있다. 그 이유는 개발코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기위해서이다.
인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다.
(메소드호출) (메소드호출)
개발코드 ------------------------> 인터페이스 -------------------------> 객체1
(리턴값1)
<------------------------- 인터페이스 <------------------------- 객체2
(리턴값1 또는 리턴값2) (리턴값2)
인터페이스 선언
[public] interface 인터페이스명 {....}
Class는 필드,생성자,메소드를 구성 멤버로 가지는데 비해 , 인터페이스는 상수와 메소드만을 구성 멤버로 가진다.
interface 인터페이스명 {
//상수
타입 상수명 = 값;
//추상메소드
타입 메소드명(매개변수,...);
//디폴트 메소드
default 타입 메소드명(매개변수,...){...}
//정적메소드
static 타입 메소드명(매개변수){...}
}
상수 필드
인터페이스는 객체 사용 설명서이므로 런타임 시 데이터를 저장할 수 있는 필드를 선언할 수 없다.
그러나 상수 필드는 선언이 가능하다. 상수는 인터페이스에 고정된 값으로 런타임 시에 데이터를 바꿀 수 없다. 상수를 선언할 때에는 반드시 초기값을 대입해야 한다.
추상메소드
추상 메소드는 객체가 가지고 있는 메소드를 설명한 것으로 호출할 때 어떤 매개값이 필요하고, 리턴 타입이 무엇인지만 알려준다. 실제 실행부는 객체(구현 객체)가 가지고 있다.
디폴트 메소드
디폴트 메소드는 인터페이스에 선언되지만 사실은 객체(구현객체)가 가지고 있는 인스턴스 메소드라고 생각해야한다. 자바 8버전부터 사용할 수 있다.
정적 메소드
정적 메소드도 역시 자바 8부터 작성할 수 있는데, 디폴트 메소드와는 달리 객체가 없어도 인터페이스만으로 호출이 가능하다.
상수 필드 선언
인터페이스는 데이터를 저장 할 수 없기 때문에 데이터를 저장할 인스턴스 또는 정적 필드를 선언할 수 없다. 대신 상수 필드만 선언할 수 있다. 상수는 public static final로 선언하는데 클래스에서 이미 학습한 바 있다. 따라서 인터페이스에 선언된 필드는 모두 public static final의 특성을 갖는다. public,static,final 을 생략하더라도 자동적으로 컴파일 과정에서 붙게된다.
[public static final] 타입 상수명 = 값;
[RemoteController.java] 상수 필드 선언
public interface RemoteController {
public int MAX_VOLUME=10;
public int MIN_VOLUME=0;
}
다음은 추상메소드 선언에 대해 글을 올리겠습니다.
아직 댓글이 없습니다. 첫번째 댓글 작성자가 되어주세요 :)