인터페이스는 일종의 추상클래스이다.
추상클래스처럼 추상메소드를 가지고 있으나, 그 추상화 정도가 추상클래스보다 더 깊다.
인터페이스내에 존재하는 추상메소드들은 몸통을 가질 수 없다. 즉, 메소드 선언만 가능하며 메소드영역에서는 코드를 작성할 수 없다.
인터페이스에 존재하는 멤버변수는 반드시 final 즉, 상수여야한다.
public static final 상수명;
접근제한자, 예약어를 작성하지 않으면 묵시적으로 public static final이 적용되어 생략하여도 정적 상수로 선언이 된다.
묵시적으로 public abstract 메소드이다.
인터페이스내 모든 메소드는 public abstract, 접근제한자와 예약어를 가지고 있어야하며 생략할 경우 public abstract 형식의 메소드로 선언된다.
Java는 단일 상속만 지원하는 객체지향언어이다.
하지만, 인터페이스의 경우에는 다중상속을 지원한다.
interface Car{
public static final body = 1;
void move(){}
}
interface Truck{
public static final wheel = 4;
void back(){}
}
interface Vehicle extends Car, Truck {
body, wheel, move(), back()을 상속 받는다.
}
인터페이스는 그 자체로 인스턴스 즉, 객체를 생성할 수 없으며 클래스를 통해 추상메서드들을 정의, 구현하고 구현클래스를 통하여 인스턴스를 생성할 수 있다.
클래스의 상속은 extends 확장의 의미를 가지지만, 인터페이스는 implements 구현한다는 의미의 키워드를 사용한다. 인터페이스 구현 클래스는 상속을 받을수도 있고, 인터페이스를 구현할 수도 있다.
public class Genesis implements Car(){
@Override
void move(){
implements 키워드를 통하여 인터페이스에 존재하는 추상메소드들을 구현할 수 있다.
}
}
인터페이스 Car는 인스턴스, 객체 생성이 불가능하다. 하지만, 구현클래스 Genesis는 추상메소드를 구현하고, 구현클래스를 통하여 인스턴스를 생성이 가능하고 이것을 다형성에 사용할 수 있다.
Car car = new Car(); --> 인터페이스는 인스턴스 생성이 불가능하다.
Car car = new Genesis(); --> 다형성을 이용한 클래스 인스턴스가 인터페이스를 참조한다.
인터페이스를 이용하여 클래스의 선언과 구현을 분리 시킬 수 있다. 때문에, 실제구현에 독립적인 프로그램을 작성하는것이 가능하다.
인터페이스를 생성하여 구현클래스를 작성하는것만으로, 한 클래스의 변경으로 인해 다른클래스를 변경할 필요가없어지고, 한클래스의 변경이 다른클래스에게 영향을 미치지 않는다.
책을보며 인터페이스에 대해 정리, 공부
출처 : 자바의정석 기초편(남궁성)