추상 클래스

상혁몬·2025년 3월 18일

java

목록 보기
8/12

추상 클래스(abstract class)는 인터페이스의 역할 + 클래스의 기능을 가지는 자바의 돌연변이 같은 클래스이다.


Predator 인터페이스 -> 추상 클래스

abstract class Predator extends Animal {
	abstract String getFood();
    void printFood() { // default 제거
    	System.out.printf("my food is %s\n", getFood());
    }
}

추상 클래스를 만들려면 class 앞에 abstract를 표기해야 한다.
또한 인터페이스의 메서드와 같은 역할을 하는 메서드에도 abstract를 붙여야 한다.
abstract 메서드는 인터페이스의 메서드와 마찬가지로 구현체가 없다.
Animal 클래스의 기능을 유지하기 위해 Animal 클래스를 상속하였다.


추상 클래스는 일반 클래스와 달리 단독으로 객체를 생성할 수 없음
반드시 추상 클래스를 상속한 실제 클래스를 통해서만 객체를 생성할 수 있다.


class Tiger extends Predator implements Barkable {
	(...생략)
}
class Lion extends Predator implemnts Barkable {
	(...생략)
}

추상 클래스에 abstract로 선언된 메서드는 인터페이스의 메서드와 마찬가지로 반드시 구현 해야한다. 추상 클래스에는 abstract 메서드 외에 실제 메서드도 사용할 수 있다. 추상 클래스에 실제 메서드를 추가하면 Tiger, Lion 등으로 만들어진 객체에서 그 메서드들을 모두 사용할 수 있게 된다.
즉, 인터페이스의 default 메서드가 추상 클래스의 일반 메서드임


인터페이스와 추상 클래스의 차이

추상 클래스는 인터페이스와 달리 일반 클래스처럼 객체 변수, 생성자, private 메서드 등을 가질 수 있다.

1. 목적

  • 추상 클래스: "IS-A" 관계를 나타냄,공통 기능의 상속기본 구현 제공에 초점.
    예) Animal 추상 클래스를 상속 받은 Dog,Cat은 동물 공통 특성을 공유
  • 인터페이스: "CAN-DO" 관계를 나타냄, 다양한 객체의 특정 행위 강제에 초점
    예) Flyable 인터페이스를 구현한 Bird, Airplane은 서로 다른 종류지만 "날 수 있음"이라는 기능을 보장

2. 구성 요소

구분추상 클래스인터페이스
추상 메서드1개 이상 필수모든 메서드 기본 추상화 (구현 불필요)
구현 메서드가능default/static 메서드만 구현 가능
멤버 변수인스턴스 변수 가능public static final 상수만 허용
생성자존재함불가능
초기화 블록가능불가능

3. 상속/구현 방식

  • 추상 클래스: 단일 상속만 지원 (extends 키워드 사용)
public abstract class Animal { ... }
public class Dog extends Animal { ... } // 단일 상속
  • 인터페이스: 다중 구현 가능(implements 키워드 사용)
public interface Swimmable { ... }
public interface Barkable { ... }
public class Duck implements Swimmable, Barkable { ... } // 다중 구현

4. 접근 제어자

  • 추상 클래스: public, protected, default 등 다양한 접근 제어자 사용 가능
  • 인터페이스: 모든 메서드는 public

0개의 댓글