추상 클래스란?(abstract class)
추상 클래스란? 미완성 설계도 또는 미완성 메서드를 갖고 있는 클래스라고 표현할 수 있다.
추상 클래스는 클래스 선언부에 abstract 키워드를 선언하며, 추상 메서드를 하나라도 포함하고 있으면 추상 클래스이다.
(단, 추상 메서드를 포함하지 않아도 abstract 키워드가 선언되어 있으면 추상 클래스가 될 수 있다.)
추상 클래스는 인스턴스 생성이 불가하며, 상속을 통해 하위 클래스에서 상위 클래스의 "모든 추상 메서드"를 완성해야만 인스턴스를 생성할 수 있다.
즉 인스턴스는 클래스라는 설계도 기반으로 '실체화된 존재'와 같은 개념이므로, 미완성 설계도인 추상 클래스로는 어떠한 존재를 실체화 할 수 없는 것이라고 생각하면 이해가 쉬울 것이다.
정리하자면, 추상 클래스는 공통 개념을 갖는 하위 클래스의 뼈대 구조 역할을 하기 위한 '미완성 설계도'이며, 하위 클래스에서 모든 추상메서드를 구현해야만 비로소 완전한 설계도로 취급될 수 있다.
*참고* 추상 메서드란? 구현부(몸통{ })가 없는 메서드이다. 추상메서드는 하나의 공통된 개념을 가진 기능을 하위 클래스마다 다르게 구현 될 것으로 예상되는 경우에 사용한다.
*참고* 추상 클래스는 추상 메서드와 상수 멤버만 가질 수 있는 인터페이스와는 다르게, 일반적인 필드와 생성자도 포함할 수 있다.
예시
- 13번 줄 class에만 abstract 키워드가 붙은 것은 모든 추상메서드 구현이 완성되지 않았기 때문이다.
(stop() 메서드가 구현되지 않았다.)
즉, 미완성 설계도 기반으로 설계도를 만들었지만 모든 추상 메서드를 구현한 '완전한 설계도'가 아니기 때문에, 이 또한 결국 미완성 설계도이므로 abstract 키워드를 붙여주어야 한다.
- 8번 줄과 같이 추상클래스의 추상 메서드를 모두 구현해야만 abstract 키워드 생략이 가능한 것.
추상 클래스의 주요 특징과 장점
1. 추상 메서드
- 추상 메서드는 선언만 되어 있으며, 구체적인 동작은 자손 클래스에서 오버라이딩을 통해 구현해야 한다.
- 이로써 메서드의 동작을 표준화 하면서, 자손 클래스마다 다른 동작을 정의할 수 있다.
2. 강제성과 일관성
- 추상 클래스를 사용하면 자손 클래스들이 반드시 상위 클래스의 모든 추상 메서드를 구현해야 한다.
- 이는 일관성 있는 메서드 구현을 유도하며, 코드의 품질을 높일 수 있다.
3. 추상 클래스의 인스턴스화 제한
- 추상 클래스는 객체를 직접 생성할 수 없다. (인스턴스 생성 불가)
- 이는 추상 클래스를 사용자에게 완전한 클래스가 아닌 뼈대 구조 역할을 강조하는데 도움을 준다.
4.상속과 다형성 강화
- 추상 클래스는 상속을 통한 다형성을 강화한다.
- 추상 클래스를 상속받은 자손 클래스에서는 추상 메서드 오버라이딩을 함으로써 다양한 동작을 수행할 수 있다.
'Java' 카테고리의 다른 글
객체 지향 설계의 기본 :: 역할과 구현의 분리 (0) | 2023.09.25 |
---|---|
익명 객체(Anonymous Object) (0) | 2023.09.04 |
클래스와 객체, 변수 (0) | 2023.08.28 |
인스턴스와 변수 (0) | 2023.08.09 |
객체지향 프로그래밍(OOP) (0) | 2023.08.09 |