추상클래스
추상 클래스는 일반 클래스와 비슷하지만 인스턴스를 직접 생성할 수 없고, 추상 메서드를 포함할 수 있는 특별한 클래스이다.
주로 상속을 통해 공통기능을 제공하면서도, 일부 메서드는 구체적인 구현을 자식 클래스에 맡기기 위해 사용 된다.
특징
1. 직접 인스턴스화 할 수 없다.
- new Animal() 처럼 바로 객체를 생성할 수 없다.
2. 추상 메서드를 가질 수 있다.
- 추상 메서드는 메서드의 선언만 있고 구현이 없다. 자식 클래스에서 반드시 구현해야 함
3. 상속을 통해 공통 기능을 제공한다.
예를 들어 보자.
파스타의 종류는 굉장히 다양하다. Pasta 라는 추상 클래스가 있을 때, 각 파스타마다 다른 레시피를 안내하도록 자식 클래스에서 구현할 수 있다
// 추상 클래스
abstract class Pasta {
// 추상 메서드 - 구현 없음
abstract void makePasta();
// 일반 메서드 - 모든 파스타에는 면을 끓이는 과정이 필요하다고 가정
void boil() {
// 파스타면을 끓인다
}
}
class Cream extends Pasta {
@Override
void makePasta() {
// 크림 파스타의 레시피
}
}
class Tomato extends Pasta {
@Override
void makePasta() {
// 토마토 파스타의 레시피
}
}
public class Main {
public static void main(String[] args) {
// Pasta pasta = new Pasta(); 의 경우는 추상 클래스는 인스턴스화가 불가하므로 오류 발생
Pasta pasta = new Cream();
Pasta pasta = new Tomato();
cream.makePasta();
tomato.makePasta();
tomato.boil();
}
}
여기서 Pasta 클래스는 추상 클래스로, makePasta() 라는 추상 메서드를 가지고 있다. Cream 과 Tomato 클래스는 Pasta 를 상속받아 각자의 방식으로 makePasta()를 구현한다. boil() 메서드는 일반 메서드로 모든 파스타가 공유하는 기능을 제공한다.
언제 추상 클래스를 사용할까?
- 공통 기능은 미리 정의해두고, 특정 기능만 자식 클래스에서 다르게 구현하고 싶을 때
- 객체를 직접 만들 필요는 없지만, 상속받아 사용할 공통의 구조가 필요할 때
추상 클래스는 클래스의 템플릿 같은 역할을 한다고 생각하면 쉽다
'Java > 기본' 카테고리의 다른 글
[Java] Java에서 final로 진짜_최종_최종_최종 불변 객체 만들기 (0) | 2024.10.31 |
---|---|
[Java] Java에서 final로 불변 객체 만들기 (0) | 2024.10.30 |
[Java] 스트림(Stream) (0) | 2024.10.27 |
[Java] 표준 함수형 인터페이스 (0) | 2024.10.27 |
[Java] 메서드 참조 (0) | 2024.10.27 |