Back-End/Java
08. 추상 클래스(Abstract Class)
Yerin Thea Yoo
2026. 2. 11. 23:41
상속을 공부했다면 자연스럽게 등장하는 개념이 추상 클래스다.
추상 클래스는 완전하지 않은 설계도다.
즉, 일부 기능은 구현되지 않은 상태로 남겨두는 클래스다.
1. 추상 클래스란?
추상 클래스란 abstract 키워드를 사용해 정의한다.
abstract class Animal {
abstract void sound();
}
특징
- 객체 생성 불가
- 추상 메서드를 가질 수 있음
- 일반 메서드도 가질 수 있음
2. 추상 메서드
구현이 없는 메서드다.
abstract void sound();
- 메서드 선언만 존재
- 중괄호 {} 없음
- 자식 클래스에서 반드시 구현해야 함
3. 왜 추상 클래스를 사용할까?
공통 구조는 제공하지만 구체적인 동작은 자식에게 맡기기 위해 사용한다.
abstract class Animal {
void breathe() {
System.out.printIn("숨을 쉰다.");
}
abstract void sound();
}
- 숨쉬는 기능은 공통
- 소리는 동물마다 다름
4. 자식 클래스에서 구현
class Dog extends Animal {
@Override
void sound() {
System.out.printIn("멍멍");
}
}
추상 클래스를 구현하지 않으면 해당 클래스도 abstract가 되어야 한다.
5. 객체 생성 불가
Animal a = new Animal(); //오류
추상 클래스는 설계 개념이기 때문에 직접 인스턴스 생성이 불가능하다.
하지만 다형성은 가능하다.
Animal a = new Dog();
6. 추상 클래스와 다형성
추상 클래스는 다형성을 위한 기반 구조다.
- 공통 타입 제공
- 자식 객체를 부모 타입으로 관리
- 동적 바인딩 발생
즉, 추상 클래스는 "상위 개념"을 표현하기 위해 존재한다.
7. 일반 클래스와의 차이
| 구분 | 일반 클래스 | 추상 클래스 |
| 객체 생성 | 가능 | 불가능 |
| 추상 메서드 | 불가능 | 가능 |
| 목적 | 구체적 구현 | 공통 개념 정의 |
8. 인터페이스와의 차이(간단 비교)
| 구분 | 추상 클래스 | 인터페이스 |
| 다중 상속 | 불가능 | 가능 |
| 일반 메서드 | 가능 | Java 8 이후 default 가능 |
| 필드 | 일반 필드 가능 | 상수만 가능 |
| 목적 | 공통 기능 + 일부 구현 | 기능의 규약 정의 |
추상 클래스는 "부분 구현"
인터페이스는 "행동의 규약"에 가깝다.
9. 언제 사용해야 할까?
추상 클래스는 다음 상황에 적합하다.
- 공통 기능을 일부 구현하고 싶을 때
- 자식 클래스 간 강한 연관 관계가 있을 때
- 상태(필드)를 공유해야 할 때