추상 클래스

기술노트

🏛️ 추상 클래스 (Abstract Class)

추상 클래스미완성된 설계도에 비유할 수 있는 특별한 클래스입니다. 객체를 직접 생성할 수는 없으며, 다른 클래스들이 상속받아 미완성된 부분을 완성하여 사용하도록 만들어졌습니다.

추상 클래스는 구현된 일반 메서드와, 구현되지 않은 '추상 메서드'를 모두 포함할 수 있습니다. 이를 통해 자식 클래스들에게 공통적인 특징을 물려주면서도, 특정 기능은 각자 상황에 맞게 반드시 구현하도록 강제할 수 있습니다.


🧐 추상 클래스의 특징

  • 객체 생성 불가 : `new` 키워드를 사용하여 직접 인스턴스화할 수 없습니다.
  • 추상 메서드 포함 가능 : 몸체(body)가 없는 메서드인 추상 메서드를 가질 수 있습니다. 추상 클래스를 상속받는 자식 클래스는 이 추상 메서드를 반드시 오버라이딩(재정의)해야 합니다.
  • 공통 기능 제공 : 일반 변수와 구현된 일반 메서드를 포함하여, 자식 클래스들에게 공통적인 기능을 물려줄 수 있습니다.

🆚 인터페이스와의 차이점

구분 추상 클래스 (Abstract Class) 인터페이스 (Interface)
목적 상속을 통한 공통 기능 공유 및 일부 기능 구현 강제 구현 객체들의 동일한 동작 보장 및 규격 설정
상속/구현 `extends` (단일 상속만 가능) `implements` (다중 구현 가능)
멤버 일반 변수, 일반 메서드, 추상 메서드 모두 가능 상수, 추상 메서드만 가능 (최신 Java에서는 일부 예외)
관계 'is-a' 관계 (A는 B의 한 종류이다) 'has-a' 또는 'can-do' 관계 (A는 B의 기능을 할 수 있다)

💡 개발자 핵심 Point

  • 추상 클래스는 여러 클래스 간의 공통된 특징을 뽑아내어 코드의 중복을 줄이고 싶을 때 유용합니다.
  • 상속받는 클래스들이 서로 밀접한 관련이 있을 때 사용하는 것이 좋습니다. (예: `Animal` 추상 클래스와 `Dog`, `Cat` 클래스)
  • "이 클래스는 상속을 위해 만들어졌습니다" 라는 의도를 명확하게 표현할 수 있습니다.
  • 인터페이스와 추상 클래스는 경쟁 관계가 아니라, 상황에 맞게 사용하는 상호 보완적인 관계입니다.