본문 바로가기

JAVA

[JAVA] 추상 클래스와 메서드

🎭 추상 클래스(Abstract Class)

위에서 언급한 Animal과 같이, 부모 클래스는 제공하지만 실제 생성되면 안 되는 클래스를 추상 클래스라고 한다.

추상 클래스는 이름 그대로 추상적 개념을 제공하는 클래스로, 실체인 인스턴스가 존재하지 않는다. 즉, 객체 생성이 불가능하다. 메모리상에 올릴 수 없다.

주로 상속 목적으로 사용되며, 부모 클래스 역할을 담당한다.

abstract class AbstractClass {
    // ...
}

클래스를 선언할 때 abstract 키워드를 붙여주면 된다. 기존 클래스와 같지만 new로 인스턴스를 생성하지 못하는 제약이 추가된다. 이렇게 아까 전의 부모 타입 객체를 직접 인스턴스 생성하는 문제점을 해결할 수 있다.


👻 추상 메서드(Abstract Method)

부모 클래스를 상속받는 자식 클래스가 반드시 오버라이딩해야 하는 메서드를 부모 클래스에서 정의할 수 있다. 이는 오버라이딩을 잊는 등의 실수를 방지하는 제약을 걸 수 있다.

추상 메서드도 실체가 없는 메서드이기 때문에 메서드 바디가 없다.

public abstract void sound();

추상 메서드 선언 시 앞에 abstract 키워드를 붙여주면 된다.

  • 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 한다. 그렇지 않으면 컴파일 오류가 발생한다. 추상 메서드는 메서드 바디가 없어서 작동하지 않는 메서드를 가지는 불완전한 클래스로 볼 수 있기 때문에, 직접 생성하지 못하도록 추상 클래스로 선언해야 하는 것이다.
  • 추상 메서드는 상속받는 자식 클래스에 의해 무조건 오버라이딩되어 사용되어야 한다. 그렇지 않으면 컴파일 오류가 발생한다. 추상 메서드는 자식 클래스가 반드시 오버라이딩해야 하므로 메서드 바디가 없는데, 이를 오버라이딩하지 않으면 자식 클래스 또한 추상 클래스로 선언해야 한다.
  • 추상 메서드는 기존 메서드와 같다. 다만 메서드 바디가 없고, 자식 클래스는 해당 메서드를 반드시 오버라이딩해야 한다는 제약이 추가되었다는 점이 다르다.

⚪ 순수 추상 클래스란?

모든 메서드가 전부 추상 메서드인 추상 클래스를 순수 추상 클래스라고 부른다.

  • 실행 로직을 전혀 가지고 있지 않다.
  • 다형성을 위한 부모 타입, 껍데기 역할만 한다.
  • 인스턴스 생성이 불가능하다.
  • 상속 시 자식 클래스는 오버라이딩을 무조건 해야 한다.
  • 주로 다형성을 위해 사용된다.

이 순수 추상 클래스는 어떤 규격을 지켜서 구현해야 하는 것처럼 느껴지는데, 자바에서는 이 순수 추상 클래스의 사용을 편리하게 하기 위해 인터페이스라는 개념을 제공한다.

'JAVA' 카테고리의 다른 글

삼항 연산자  (0) 2026.03.13
[JAVA] 인터페이스란?  (0) 2025.09.25
[JAVA] 다형성과 중요한 개념들.  (0) 2025.09.22
[JAVA] 상속과 super  (0) 2025.09.20
[JAVA] final이란?  (0) 2025.09.17