프로그래밍 언어/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 일반 클래스

항목 추상 클래스 일반 클래스
객체 생성 ❌ 불가능 ⭕ 가능
추상 메서드 ⭕ 포함 가능 ❌ 불가

 

 

요약 정리

항목 내용
정의 일부 구현 + 일부 강제 구현을 함께 제공하는 클래스
장점 코드 재사용 + 구현 강제 가능
단점 다중 상속 불가
실무 활용 공통 베이스 클래스, 프레임워크 확장 등에서 매우 자주 사용

추상 클래스는 "공통 기능은 내가 해줄게,
근데 이건 꼭 네가 구현해!" 라는 반쯤 완성된 클래스입니다.

  • 객체를 만들 수는 없지만,
  • 자식 클래스를 통해 확장성과 재사용성을 극대화할 수 있습니다.
💡 다중 상속이란?
➡ 하나의 클래스가 둘 이상의 클래스를 동시에 상속받는 것

 

 

 

 

읽어주셔서 감사합니다 😊

 


소스 코드 바로가기