어제 오늘 내일

[Java] 추상클래스란? (abstract class) 본문

IT/Java

[Java] 추상클래스란? (abstract class)

hi.anna 2025. 12. 24. 00:53

 

Java에서 추상클래스(abstract class)는 객체를 직접 생성할 수 없고, 상속을 통해서만 사용되는 클래스입니다.
완성되지 않은 메서드(추상 메서드)를 포함할 수 있으며, 공통 기능은 제공하되 세부 동작은 자식 클래스가 구현하도록 강제하는 역할을 합니다.

 

1. 추상클래스의 기본 개념

추상클래스는 abstract 키워드를 사용하여 선언합니다.

특징

  • 객체 생성 불가
  • 추상 메서드 포함 가능(선언만 있고 구현 없음)
  • 일반 메서드(구현된 메서드)도 포함 가능
  • 공통적인 속성과 동작을 정의하는 데 사용

형식:

abstract class Animal {
    abstract void sound(); // 추상 메서드
}

설명

  • sound()는 구현이 없으므로 자식 클래스가 반드시 구현해야 함

 

2. 추상클래스 사용 목적

  • 여러 클래스가 공통된 구조를 사용하도록 강제
  • 공통 기능은 부모에서 제공하고, 세부적인 동작은 자식이 정의
  • 상속을 통해 일관된 설계를 만들 수 있음

예를 들어, "동물"은 울다(sound)라는 개념을 가지지만, 구체적인 소리는 동물별로 다르므로 추상 메서드로 선언하는 것이 자연스럽습니다.

 

3. 추상 메서드(abstract method)

추상 메서드는 구현이 없는 메서드이며, 자식 클래스가 반드시 오버라이딩해야 합니다.

abstract void sound();

자식 클래스에서 구현:

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍");
    }
}

 

4. 추상클래스에서 일반 메서드도 포함 가능

추상클래스는 완전한 클래스가 아니지만, 일반 메서드도 포함할 수 있습니다.

abstract class Animal {
    void eat() {
        System.out.println("먹습니다");
    }
    abstract void sound();
}

설명

  • eat()은 모든 동물이 공통으로 사용하는 기능
  • sound()는 동물마다 다르게 구현해야 하는 기능

 

5. 추상 클래스는 객체 생성 불가

Animal a = new Animal(); // ❌ 오류: 추상클래스는 인스턴스화 불가

하지만 자식 클래스는 객체 생성 가능:

Animal d = new Dog();
d.sound();

 

6. 전체 예제

abstract class Animal {
    abstract void sound();

    void sleep() {
        System.out.println("잠을 잡니다");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("야옹");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal a = new Cat(); // 업캐스팅
        a.sound();            // 야옹
        a.sleep();            // 잠을 잡니다
    }
}

출력

야옹
잠을 잡니다

 

7. 추상클래스 vs 인터페이스 비교

구분 추상클래스 인터페이스

구분 추상 클래스 인터페이스
객체 생성 불가 불가
상속 단일 상속만 가능 다중 구현 가능
메서드 추상 + 일반 메서드 모두 포함 기본적으로 추상, default·static 가능
목적 공통 기능 제공 + 필요한 부분만 구현 강제 기능의 규칙 제공

 

8. 정리

  • 추상클래스는 완성되지 않은 클래스
  • 객체 생성 불가, 반드시 상속받아 사용
  • 추상 메서드는 자식이 구현해야 함
  • 공통 기능을 제공하면서 구조적 설계를 가능하게 함

 

 

반응형
Comments