인터페이스 vs 추상클래스
1️⃣ 추상클래스
- 일반 클래스와 크게 다를 것은 없지만 단지, 추상 메서드를 선언하여 상속을 통해 자손 클래스에서 완성하도록 유도하는 클래스이다.
- 클래스를 설계도라고 표현한다면 추상 클래스는 미완성 설계도로 표현할 수 있다.
- 같은 크기의 TV라도 기능의 차이에 따라 여러 종류의 모델이 있지만 설계도 90은 동일할테니 어느정도 틀을 갖춘 상태에서 진행하는 것이 좋으며 이때 추상 클래스를 사용할 수 있다.
- 추상클래스 자체는 미완성 설계도이기 때문에 그 자체만으로는 객체를 생성할 수 없다.
// abstract 키워드를 붙여주어야 합니다.
abstract class 클래스이름 {
}
추상메서드
- 메서드의 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 메서드를 말한다.
- 추상 메서드는 상속받는 클래스에 따라 달라질 수 있다.
abstract class AbstractA {
abstract void method();
}
추상클래스 규칙
- 추상 클래스 키워드는
abstract
를 붙여서 표현한다.
- 추상 메서드를 포함하지 않은 클래스 에서도
abstract
키워드를 붙여서 추상클래스로 지정할 수 있다.
- 클래스를 abstract로 지정하면 new를 통해 객체를 직접 생성할 수 없다.
- 메서드에 abstract를 사용할 경우 interface의 메서드와 같이 구현 부분이 없다.
- abstract로 선언한 메서드를 자식 클래스에서 필수적으로 구현해야 한다.(오버라이딩)
- 이는 자식 클래스에서 추상 메서드를 반드시 구현하도록 강제하는 것이다.
public abstract class Player {
boolean pause;
int currentPos;
public Player() {
this.pause = false;
this.currentPost = 0;
}
abstract void play(int pos);
abstract void stop();
void pause() {
if(pause) {
pause = false;
play(currentPos);
} else {
pause = true;
stop()
}
}
}
// 구현체
// 상속받은 메서드 외에 필드나 메서드 추가로 작성이 가능하다.
public class Melon extends Player {
@Override
void play(int pos) {
// 구현
}
@Override
void stop() {
// 구현
}
}
2️⃣ 인터페이스
- 인터페이스는 일종의 추상 클래스로 추상 메서드를 갖지만 추상 클래스보다 추상화 정도가 높다.