Interface는 사전적인 의미로 상호간의 소통을 위한 매개체라는 의미로 사람이 기계를 조작하기 위해 사용되는 각종 버튼들을 인터페이스 개념의 대표적인 예로 쓰인다. 이러한 개념을 객체지향에 적용시킨 것이 자바의 interface이다. 즉, 클래스
를(사람이) 구현
하기 위해(기계를 조작하기 위한) 사용되는 각종 메소드
(각종 버튼)를 만들어 둔 매개체가 interface라는 것이다.
public abstract
가 있는 것처럼 컴파일러가 처리한다.'초기화가 된 수정 불가능한 필드'
만 사용 가능하다. 즉 일반적인 필드를 선언해도 컴파일러에 의해 자동적으로 public static final
로 인식한다. 지정자 몇개를 빠트려도 빈 부분을 컴파일러가 컴파일 과정에서 빠진 부분을 채워준다./* 인터페이스 */
public interface NewInterface{
/*
인터페이스에서 선언된 필드는 무조건
public static final이 선언된 필드즉 상수
취급을 하기 때문에 항상 필드 선언과 동시에
초기화를 해줘야 한다.
*/
int a = 1;
public char = 'A';
final double = 1.2;
static float = 1.8f;
//......
/*
인터페이스에 선언된 추상 메소드는
자동으로 public abstract가 선언된 상태로
인식을 한다.
*/
public void method1();
int method2();
abstract String method3();
//......
/* Java 8부터 인터페이스에서
디폴트 메소드 한정으로 구현부가 존재하는
메소드를 사용할 수 있다.*/
// default void method(){
// ////// 메소드 구현부 //////
// }
}
<aside>
💡 Java 8
부터 구현된 메소드 사용 가능
java 8 부터 추가된 기능으로 기존에는 추상 메소드만 선언 가능했던 것이 default 접근 지정자 한정으로 구현부가 존재하는 메소드를 사용할 수 있다. 이때 주의해야 할 점은 일반 클래스에서는 접근 지정자가 없는 메소드가 디폴트 메소드였지만 인터페이스에서는 default 접근 지정자를 선언 해줘야 한다. default 선언이 없으면 추상 메소드로 간주하여 컴파일 에러가 발생한다.
</aside>
extends
키워드를 사용하지만 Interface는 implements
키워드를 사용한다.public interface NewInterface{
int method1();
public void method2();
}
public class NewClass implements NewInterface{
@Override
public int method1(){
return 0;
}
@Override
public void method2(){}
}
interface A{}
interface B extends A{} // 인터페이스 단일 상속
interface C{}
// 인터페이스 다중상속
interface D extends B,C{}
interface E extends A,B,C,D{}