: 구현하고자 하는 클래스에 동일한 목적의 기능을 수행하게끔 강제하는 클래스의 틀 역할을 하는 것. (자바의 다형성, 코드 유지 보수, 수정 최소화를 극대화)
추상 클래스와 유사하지만 추상 메서드 기능만 사용가능하여 간결하다. (필드, 생성자 사용 X)
스마트폰(인터페이스 클래스) → 갤럭시 , 아이폰
: 공통된 기능 1. 스펙 보여주기 기능 2. 충전 기능 3. 카메라 기능
→ 필드 및 생성자 사용 불가능.
→ 추상 클래스 ⇒ interface 키워드 사용하여 부모 클래스로 선언
→ 상속 받을 자식 클래스 ⇒ implement 키워드 사용하고 오버라이딩
// 인터페이스는 기본적으로 추상화 상태이기 때문에
// 추상화 키워드 사용하지 않아도 됨.
public interface SmartPhone { // 스마트폰 클래스를 부모 인터페이스로
// 인터페이스는 처음 설계부터 객체를 만들지 않을 것을 가정한 클래스로
// 생성자 및 필드를 선언할 수 없다. 상수는 선언 가능.
void information(); // 앞에 추상화 키워드 안붙여도 되는 간결함.
void charge();
void camera();
}
public class Galaxy implements SmartPhone {
// 인터페이스 부모 클래스에서 상속 받은 모든 기능 오버라이딩하여 사용
@Override
public void information() {}
public void charge() {}
public void camera() {}
}
// 추상 클래스는 객체로 생성하지 못해.
SmartPhone galaxy = new Galaxy(); // 구체화된 갤럭시 클래스로 객체 생성
다양한 기능을 갖는 인터페이스 클래스 중 필요한 기능을 자식 클래스가 선택적으로 다중 상속받는 것이 가능하다.
// 각자 특수한 기능을 갖는 인터페이스로 부모 클래스 생성
public interface Wild {
void violent()
}
public interface Pet {
void handle()
}
-------------------------------------------------------------
// 난폭하면서 애완동물인 기능을 갖는 동물 클래스 생성 시
// 불독은 두 기능을 다 갖고 있어서 여러 클래스를 상속 받을 수 있다.
// 추상 클래스는 불가능 !!
public class BullDog implement Pet, Wild {
@Override
public void handle() {} // 각 인터페이스 클래스의 기능을 오버라이딩으로 구체화
@Override
public void violent() {}
}
// Interface는 특수한 기능을 각각 인터페이스로 나눠두고
// 필요한 기능을 갖는 여러 부모 클래스를 불러와 다중 상속 가능한 장점 !!