abstract(앱스트랙트)는 “추상적인”, 즉 ‘형태만 있고 내용은 없는’ 이란 뜻이다.
자바에서는 클래스나 메서드에 붙어서 ‘아직 완성되지 않은 구조’임을 나타내는 키워드
abstract의 기본 개념
키워드 의미
| abstract | “구현이 미완성이다.”, “하위 클래스가 완성해야 한다.” |
즉,
👉 “이 클래스나 메서드는 형태만 정의하고, 구체적인 내용은 자식 클래스가 구현해라!”
라는 약속이에요.
abstract class (추상 클래스)
- abstract가 붙은 클래스는 직접 객체 생성이 불가능
- 대신 공통 속성과 메서드 구조를 정의하고
구체적인 구현은 상속받은 클래스가 완성
예:
// 추상 클래스
public abstract class Animal {
// 추상 메서드 (몸체 없음)
public abstract void sound();
// 일반 메서드도 포함 가능
public void eat() {
System.out.println("먹는 중...");
}
}
// 구체적인 클래스 (상속 후 구현)
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
// Animal a = new Animal(); ❌ 에러: 추상 클래스는 직접 생성 불가
Animal dog = new Dog();
dog.sound(); // 멍멍!
dog.eat(); // 먹는 중...
}
}
abstract method (추상 메서드)
- 선언만 있고, 구현(내용) 이 없다
- 반드시 하위 클래스에서 오버라이드(@Override) 해야 한다
public abstract void sound(); // ← 세미콜론만 있고, 중괄호 없음
주요 특징 요약
구분 추상 클래스 (abstract class) 인터페이스 (interface)
| 목적 | “공통 기능 + 일부 미완성 기능” 제공 | “규약(약속)” 제공 |
| 객체 생성 | ❌ 불가능 | ❌ 불가능 |
| 상속 방식 | extends (단일 상속) | implements (다중 구현 가능) |
| 포함 요소 | 변수, 일반 메서드, 추상 메서드 | (자바8 이후) 디폴트/정적 메서드도 가능 |
| 사용 예 | 여러 클래스가 일부 기능만 다를 때 | 완전한 규칙만 정하고 싶을 때 |
현실 비유
예를 들어,
"모든 동물은 울 수 있다"
하지만, ‘어떻게 우는지’는 동물마다 다르다.
이럴 때:
- Animal → 추상 클래스 (울 수 있다는 구조 정의)
- Dog, Cat → 구체 클래스 (울음소리를 직접 구현)
한 줄 정리
abstract = “형태만 정의하고 내용은 자식이 완성해야 한다.”
즉, 공통 구조를 정의하고, 세부 구현은 강제하는 틀이다.
'JAVA' 카테고리의 다른 글
| 쿼리 DSL 메서드 종류 (0) | 2025.11.13 |
|---|---|
| 상속 extends 와 규약 interface 의 차이 (0) | 2025.11.12 |
| Logger , LoggerFactory 를 사용하는 이유 (0) | 2025.11.12 |
| @Configuration 과 xml 과 yml 설정 파일의 차이 (1) | 2025.11.12 |
| @SuppressWarnings 어노테이션 (0) | 2025.11.12 |