Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 추상 메서드 없이 추상 클래스를 정의할 수 있을까요?

네, Java에서는 추상 메서드(abstract method)가 하나도 없는 추상 클래스를 선언할 수 있습니다. 이는 의외로 많은 개발자들이 헷갈려 하는 부분인데, 추상 클래스의 핵심은 '추상 메서드의 존재'가 아니라 '직접 인스턴스화 불가능'이라는 점에 있습니다.

추상 클래스의 주요 특징

  • 추상 클래스란 구현 내용을 숨기고 기능의 정의만 사용자에게 보여주는 클래스를 의미합니다.
  • 추상 클래스에는 추상 메서드일반(구체적인) 메서드가 함께 존재할 수 있으며, 반드시 추상 메서드를 포함해야 하는 것은 아닙니다.
  • 추상 클래스는 직접 객체를 생성할 수 없습니다. 다만 서브클래스의 객체를 통해 간접적으로 인스턴스를 만들 수 있습니다.
  • Java의 추상 클래스는 기본 동작(default behavior)을 구현하는 인스턴스 메서드를 가질 수 있습니다.
  • 추상 클래스는 한 번에 하나의 클래스 또는 하나의 추상 클래스만 상속받을 수 있습니다.
  • 추상 메서드 없이 클래스를 abstract로 선언한다는 것은, 이 클래스를 단독으로 인스턴스화하는 것을 금지하겠다는 의미입니다.

예제 코드

abstract class AbstractDemo { // 추상 클래스
   private int i = 0;
   public void display() { // 일반 메서드
      System.out.print("Welcome to Tutorials Point");
   }
}
public class InheritedClassDemo extends AbstractDemo {
   public static void main(String args[]) {
      AbstractDemo demo = new InheritedClassDemo();
      demo.display();
   }
}

위 예제에서 AbstractDemo 클래스에는 추상 메서드가 하나도 정의되어 있지 않습니다. 그럼에도 컴파일러는 어떠한 컴파일 타임 오류도 발생시키지 않으며, 정상적으로 동작합니다.

실행 결과

Welcome to Tutorials Point

정리

추상 메서드가 없어도 클래스를 abstract로 선언하면 유효하며, 그 목적은 크게 두 가지입니다. 첫째, 해당 클래스가 단독으로 객체화되는 것을 방지하고, 둘째, 하위 클래스가 반드시 이 클래스를 상속해서 사용하도록 강제하는 설계적 제약을 두는 것입니다. 따라서 공통 기능은 제공하면서 직접적인 인스턴스 생성은 막고 싶을 때 추상 메서드 없는 추상 클래스를 활용할 수 있습니다.