- 추상 메소드 : 메소드의 기능(구현내용)이 없고, 메소드의 헤더부만 존재하는 불완전한 메소드
추상 클래스(Abstract Class)
- 추상 메소드를 0개 이상 포함하는 클래스
- 스스로 자신의 생성자를 활용한 인스턴스 생성 불가능 → 불완전한 클래스
- 상속을 활용해 하위클래스 타입의 인스턴스를 이용해 생성
- 사용 이유
- 다형성 적용을 위한 부모타입 역할
- 필수 기능을 정의해 일관된 인터페이스(동일 기능)를 제공
- 오버라이딩에 대한 강제성 부여
abstract class Animal {
String name;
Animal(String name) {
this.name = name;
}
abstract void makeSound();
void sleep() {
System.out.println(name + " is sleeping.");
}
}
인터페이스(Interface)
- 추상 메소드와 상수 필드만 가질 수 있는 클래스의 변형체
- (JDK 1.8 이후부터 추가) static 메소드 및 default 추가 시에는 바디 부분 구현 가능하기도 함
- 상속과 달리 implements 키워드 사용
- 사용 이유
- 공유 목적의 상수를 기반으로 모든 기능을 공통화해서 강제성을 부여하기 위해
- 자바의 단일 상속 보완
interface TestInter {
public static final PI1 = 3.1415;
PI2 = 3.14;
public abstract void method1();
void method2();
}
추상 클래스와 인터페이스
공통점
구분 | 추상 클래스 | 인터페이스 |
---|
자체 인스턴스 생성 | 생성 불가 | 생성 불가 |
다형성 적용 시 상위 타입 활용 가능 유무 | 가능 | 가능 |
차이점
구분 | 추상 클래스 | 인터페이스 |
---|
상속 가능 범위 | 단일 상속 | 다중 상속 |
키워드 | extends 사용 | implements 사용 |
추상 메소드 갯수 | abstract 메소드 0개 이상 | 모든 메소드는 abstract |
abstract 키워드 명시 | 명시적 사용 | 묵시적으로 abstract |
생성자 | 가질 수 있음 | 가질 수 없음 |
- 추상 클래스: 공통된 상태와 행동을 여러 클래스에서 공유해야 할 때 사용
- 인터페이스: 클래스 간에 공통된 행동을 정의하고, 여러 클래스가 이 행동을 구현하도록 강제할 때 사용