인터페이스(
interface
)는 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스이다.
인터페이스 선언 시 interface
키워드를 사용한다.
[ public ] interface 인터페이스명 { ... }
인터페이스 이름은 클래스 이름을 작성하는 방법과 동일하다.
필드, 생성자, 메소드를 구성 멤버로 가지는 클래스에 비해, 인터페이스는 상수와 메소드만을 구성 멤버로 가진다.
인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다.
interface 인터페이스명 {
//상수
타입 상수명 = 값;
//추상 메소드
타입 메소드명(매개변수, ...);
//디폴트 메소드
default 타입 메소드명(매개변수, ...) { ... }
//정적 메소드
static 타입 메소드명(매개변수) { ... }
}
Constant Field
)Abstract Method
)Default Method
)Static Method
)public
, static
, final
을 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.
[ public static final ] 타입 상수명 = 값;
상수명은 대문자로 작성하되, 서로 다른 단어로 구성되어 있을 경우에는 언더바_
로 연결하는 것이 관례이다.
Ex) MODEL
, MAX_VALUE
인터페이스 상수는 static {}
블록으로 초기화할 수 없기 때문에 반드시 선언과 동시에 초기값을 지정해야 한다.
public interface RemoteControl {
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
}
추상 메소드는 리턴 타입, 메소드명, 매개변수만 기술되고 중괄호
{}
를 붙이지 않는 메소드를 말한다.
public abstract
의 특성을 갖기 때문에 public abstract
을 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.public interface RemoteControl {
//상수
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
//추상 메소드 (메소드 선언부만 작성)
public void turnOn();
public void turnOff();
public void setVolume(int volume);
}
default
키워드가 리턴 타입 앞에 붙는다.public
특성을 갖기 때문에 public
을 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.[public] default 리턴타입 메소드명(매개변수, ...) { ... }
public interface RemoteControl {
//상수
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
//추상 메소드 (메소드 선언부만 작성)
public void turnOn();
public void turnOff();
public void setVolume(int volume);
//디폴트 메소드
default void setMute(boolean mute) {
if (mute) {
System.out.println("무음 처리합니다.");
} else {
System.out.println("무음 해제합니다.");
}
}
}
정적 메소드는 디폴트 메소드와 마찬가지로 자바 8에서 추가된 인터페이스의 새로운 멤버이다. 형태는 클래스의 정적 메소드와 완전 동일하다.
정적 메소드는 public
특성을 갖기 때문에 public
을 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.
[public] static 리턴타입 메소드명(매개변수, ...) { ... }
public interface RemoteControl {
//상수
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
//추상 메소드 (메소드 선언부만 작성)
public void turnOn();
public void turnOff();
public void setVolume(int volume);
//디폴트 메소드
default void setMute(boolean mute) {
if (mute) {
System.out.println("무음 처리합니다.");
} else {
System.out.println("무음 해제합니다.");
}
}
//정적 메소드
static void changeBattery() {
System.out.println("건전지를 교체합니다.");
}
}
이것이 자바다 책
http://tcpschool.com/java/java_polymorphism_interface