인터페이스란 ?

: 구현하고자 하는 클래스에 동일한 목적의 기능을 수행하게끔 강제하는 클래스의 틀 역할을 하는 것. (자바의 다형성, 코드 유지 보수, 수정 최소화를 극대화)

추상 클래스와 유사하지만 추상 메서드 기능만 사용가능하여 간결하다. (필드, 생성자 사용 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는 특수한 기능을 각각 인터페이스로 나눠두고
// 필요한 기능을 갖는 여러 부모 클래스를 불러와 다중 상속 가능한 장점 !!