public static final과 public abstract 제어자는 생략이 가능interface 인터페이스이름{
public static final 타입 상수이름 = 값;
public abstract 타입 메서드이름(매개변수목록);
}
// --------------------------------------------------------
interface TV {
int MAX_VOLUME = 10; // public static final 생략 가능
int MIN_VOLUME = 10;
void turnOn(); // public abstract 생략 가능
void changeChannel(int channel);
}
인스턴스 생성이 불가하고 클래스에서 implements로 키워드로 구현하여 사용
자식 클래스에서 클래스 상속 ( extends )와 인터페이스 구현 ( implements )가 동시에 가능
인터페이스 다중 상속 가능 ( 클래스는 안되는데 )
default 메서드
인터페이스 안에서 구현이 포함된 메서드
원래 인터페이스는 추상 메서드만 정의할 수 있었지만 자바 8부터 default 키워드를 사용하여 일반 메서드처럼 구현할 수 있게 됨 ( 구현 클래스에서 오버라이드 가능 )
public interface MyInterface {
default void printHello() {
System.out.println("Hello from interface!");
}
}
static 메서드
인터페이스 이름으로 호출 가능한 정적 메서드
객체의 생성 없이 사용 가능하며 클래스의 static 메서드처럼 인터페이스에서도 제공 가능
public interface MyInterface {
static void printInfo() {
System.out.println("Static method in interface");
}
}
=> MyInterface.printInfo(); 이렇게 호출!
구체적이지 않은 추상적인 ( abstract ) 데이터를 담고 있는 클래스로 하위 클래스들의 공통점을 모아 추상화하여 만든 클래스
일반 클래스와 달리 인스턴스화가 불가능한 클래스이며, abstract 키워드를 사용하여 선언
⇒ 인스턴스화 할거면 상속시킨 자식 클래스를 인스터스화 하여 사용해야 함
extends로 상속받아 사용| 구분 | 추상 클래스 | 인터페이스 |
|---|---|---|
| 키워드 | abstract class | interface |
| 인스턴스 생성 | 불가 | 불가 |
| 상속 방식 | extends (단일 상속만 가능) | implements (다중 구현 가능) |
| 메서드 구성 | 추상 메서드 + 일반 메서드 | 자바 8 이후: 추상 + default + static 메서드 |
| 변수 선언 | 인스턴스 변수, 상수 모두 가능 | 모든 변수는 public static final 상수 |
| 다중 상속 | 안됨 | 여러 인터페이스 구현 가능 |
| 사용 목적 | 공통 로직 일부 구현 + 확장 | 기능 명세 (계약서 역할) 중심 |
인터페이스는 클래스가 메서드의 구현을 강제하기 위해 사용하지만, 추상 클래스는 확장과 재사용성에 초점을 두어 공통 로직을 추상화하는 부분이 인터페이스와 유사점을 가지는 것뿐임
추상 클래스는 공통된 속성과 기능을 일부 구현할 수 있고, 인터페이스는 기능의 명세만 정의하며
, 추상 클래스는 단일 상속만 가능하지만, 인터페이스는 다중 구현이 가능하다는 점이 가장 큰 차이 !!