0개 이상의 추상 메서드(메서드의 바디가 없는 메서드)를 포함하거나 객체 생성을 제한하기 위해 선언된 클래스임
abstract 키워드를 사용하여 정의하며, 직접 객체를 생성할 수 없다
- 추상 메서드를 0개 이상 포함할 수 있다
- 직접 인스턴스를 생성할 수 없다
- 완성된 메서드(일반 메서드)도 함께 포함할 수 있다
- 상속을 통해 하위 클래스에서 추상 메서드를 오버라이딩하여 완성해야 사용할 수 있다
abstract class AbstractExample {
abstract void method(); // 추상 메서드
public void method2() {
System.out.println("완성된 메서드 또한 정의할 수 있다");
}
}
추상 메서드의 사용 목적
1. 상속 구조에서 유연한 설계를 위해서 사용함
추상 클래스는 상속 구조에서 공통적인 속성과 기능을 미리 정의하고, 각 하위 클래스가 구체적인 구현을 담당하도록 하는 데 유리하다. 이렇게 하면 변경에 유연하게 대응할 수 있고 코드의 중복도 줄일 수 있다
2. 공통적인 기능을 강제하기 위한 설계 도구
추상 클래스에서 선언된 추상 메서드는 하위 클래스에서 반드시 구현해야하므로, 공통된 동작을 하위 클래스에 강제할 수 있다
3. 동물 소리 내기 예
// 추상 클래스
abstract class Animal {
public String kind;
public abstract void sound(); // 추상 메서드
}
// 일반 클래스
class Dog extends Animal { // 추상 클래스를 상속함
public Dog() {
this.kind = "포유류";
}
public void sound() { // 추상 메서드 구현
System.out.println("멍멍");
}
}
class Cat extends Animal {
public Cat() {
this.kind = "포유류";
}
public void sound() { // 상속했기 때문에 반드시 구현해줘야한다
System.out.println("야옹");
}
}
class Example {
public static void main(String[] args) {
Animal dog = new Dog();
dog.sound(); // 멍멍
Cat cat = new Cat();
cat.sound(); // 야옹
}
}
* Animal 클래스는 추상 클래스이며, sound()는 추상 메서드이다
* Dog와 Cat 클래스는 Animal을 상속받아 각각 sound() 메서드를 오버라이딩함
* 추상 클래스를 직접 인스턴스화 할 수는 없지만, 하위 클래스에서 구현 후에는 인스턴스 생성이 가능함
추상 클래스 vs 일반 클래스
| 항목 | 추상 클래스 | 일반 클래스 |
| 인스턴스 생성 | 불가 | 가능 |
| 추상 메서드 포함 여부 | 가능 | 불가 |
| 상속 여부 | 상속이 전제됨 | 상속을 선택할 수 있음 |
| 용도 | 공통 구조 설계 | 구체 기능 구현 |
추상화와 추상 클래스
- 공통 속성과 기능을 상위 클래스로 정의하고,
- 상황에 따라 다른 동작을 하위 클래스에 위임함으로
- 유지보수와 확장에 유리한 구조를 만들 수 있다
정리
- 추상 클래스는 미완성 설계도로, 0개 이상의 추상 메서드를 포함하거나 객체 생성을 막기 위해 사용된다
- 추상 클래스는 직접 인스턴스를 만들 수 없고, 상속을 통해 하위 클래스가 구현을 완성해야만 객체 생성이 가능함
- 추상 클래스는 상속과 추상화 구조를 동시에 설계할 수 있는 강력한 도구이다. 유연성과 재사용성을 높인다.
'JAVA > 추상화(Abstraction)' 카테고리의 다른 글
| 추상 클래스와 인터페이스, 선택 기준과 활용 전략에 대해 (0) | 2026.04.21 |
|---|---|
| 인터페이스(interface) (0) | 2026.04.21 |
| final 키워드 (0) | 2026.04.21 |
| abstract 제어자 (0) | 2026.04.20 |
| 추상화(Abstraction) (0) | 2026.04.20 |