프로그래밍 언어/Java
[Java] 28. 추상 클래스란?
WooZzing
2025. 4. 17. 16:22
추상 클래스란?
하나 이상의 추상 메서드(몸체 없는 메서드)를 포함하고 있는 클래스
직접 객체를 만들 수 없고, 상속을 통해서만 사용할 수 있는 클래스입니다.
일부는 직접 구현하고, 일부는 자식 클래스에게 "이건 네가 직접 구현해!" 하고 강제하는 설계도 역할을 합니다.
선언 문법
abstract class 클래스명 {
// 추상 메서드 (몸체 없음)
abstract void 메서드이름();
// 일반 메서드 (몸체 있음)
void 일반메서드() {
System.out.println("일반 메서드 실행");
}
}
특징
특징 | 설명 |
abstract 키워드 사용 | 클래스 또는 메서드에 붙임 |
객체 생성 불가 | ❌ 직접 생성 불가 (new로 객체 생성할 수 없음) |
상속 | ✅ 자식 클래스가 상속해서 구현해야함 |
메서드 구성 | 추상 메서드 + 일반 메서드 둘 다 가능 |
생성자 | 생성자는 있으나 직접 호출은 불가 (자식이 super()로 호출) |
목적 | 공통 기능 제공 + 특정 기능 구현 강제 |
사용 예시
* Animal 클래스 (추상 클래스)
abstract class Animal {
abstract void sound(); // 추상 메서드 ➡ 자식이 반드시 구현해야함
public void breathe() {
System.out.println("숨을 쉽니다.");
}
}
* Dog 클래스 (자식 클래스)
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
* Cat 클래스 (자식 클래스)
class Cat extends Animal {
@Override
void sound() {
System.out.println("야옹");
}
}
* 실행 클래스
public class Main {
public static void main(String[] args) {
Animal a1 = new Dog();
Animal a2 = new Cat();
a1.sound();
a2.sound();
a1.breathe();
}
}
- 출력 결과 -
멍멍
야옹
숨을 쉽니다.
- Animal은 추상 클래스이며, 공통 동작인 breathe()는 구현되어 있고, sound()는 자식이 구현하도록 추상 메서드로 선언되어 있습니다.
- Dog, Cat은 Animal을 상속받아 각각 sound() 메서드를 오버라이딩하여 동물마다 다른 소리를 냅니다.
- Main 클래스에서 Animal 타입으로 Dog, Cat을 다형성으로 처리하며, sound()는 자식에 따라 다르게 실행되고, breathe()는 부모 클래스의 공통 기능이 실행됩니다.
추상 클래스를 사용하는 이유
- 공통 동작은 미리 정의하고,
- 구체적인 동작은 자식 클래스에 맡기기 위해
❓ 예를 들어
➡ Animal이라는 큰 개념에는 breathe() 같은 공통 동작이 있지만,
sound()는 동물마다 다르기 때문에 자식 클래스에서 구현해야 합니다.
추상 클래스 vs 일반 클래스
항목 | 추상 클래스 | 일반 클래스 |
객체 생성 | ❌ 불가능 | ⭕ 가능 |
추상 메서드 | ⭕ 포함 가능 | ❌ 불가 |
요약 정리
항목 | 내용 |
정의 | 일부 구현 + 일부 강제 구현을 함께 제공하는 클래스 |
장점 | 코드 재사용 + 구현 강제 가능 |
단점 | 다중 상속 불가 |
실무 활용 | 공통 베이스 클래스, 프레임워크 확장 등에서 매우 자주 사용 |
추상 클래스는 "공통 기능은 내가 해줄게,
근데 이건 꼭 네가 구현해!" 라는 반쯤 완성된 클래스입니다.
- 객체를 만들 수는 없지만,
- 자식 클래스를 통해 확장성과 재사용성을 극대화할 수 있습니다.
💡 다중 상속이란?
➡ 하나의 클래스가 둘 이상의 클래스를 동시에 상속받는 것
읽어주셔서 감사합니다 😊