사전적 의미로 추상은 실체 간에 공통되는 특성을 추출한 것을 말한다. 예를 들어 새, 곤충, 물고기 등의 공통점은 동물이다. 여기서 동물은 실체들의 공통되는 특성을 가지고 있는 추상적인 것이라고 볼 수 있다.
추상 클래스
객체를 생성할 수 있는 클래스를 실체 클래스라고 한다면, 이 클래스들의 공통적인 필드나 메서드를 추출해서 선언한 클래스를 추상 클래스라고 한다. 추상 클래스는 실체 클래스의 부모 역할을 한다. 따라서 실체 클래스는 추상 클래스를 상속해서 공통적인 필드나 메서드를 물려받을 수 있다.
예를 들어 Bird, Insect, Fish와 같은 실체 클래스에서 공통되는 필드와 메서드를 따로 선언한 Animal 클래스를 만들 수 있고, 이것을 상속해서 실체 클래스를 만들 수 있다.
추상클래스는 실체 클래스의 공통되는 필드와 메서드를 추출해서 만들었기 때문에 new 연산자를 사용해서 객체를 직접 생성할 수 없다.
Animal animal = new Animal(); // x
추상 클래스는 새로운 실체 클래스를 만들기 위한 부모 클래스로만 사용된다. 즉, 추상 클래스는 extends 뒤에만 올 수 있다.
class Fish extends Animal { ... }
추상 클래스 선언
클래스 선언에 abstract 키워드를 붙이면 추상 클래스 선언이 된다. 추상 클래스는 new 연산자를 이용해서 객체를 직접 만들지 못하고 상속을 통해 자식 클래스만 만들 수 있다.
public abstract class 클래스명 { ... }
추상 클래스도 필드, 메서드를 선언할 수 있다. 그리고 자식 객체가 생성될 때 super()로 추상 클래스의 생성자가 호출되기 때문에 생성자도 반드시 있어야 한다.
추상 메서드와 재정의
자식 클래스들이 가지고 있는 공통 메서드를 뽑아내어 추상 클래스로 작성할 때, 메서드 선언부(리턴타입, 메서드명, 매개변수)만 동일하고 실행 내용은 자식 클래스마다 달라야 하는 경우가 많다. 이런 경우를 위해서 추상 클래스는 다음과 같은 추상 메서드를 선언할 수 있다. 일반 메서드와 차이점은 abstract 키워드가 붙고 중괄호 {}가 없다.
abstract 리턴타입 메서드명(매개변수, ...);
추상 메서드는 자식 클래스의 공통 메서드라는 것만 정의할 뿐, 실행 내용은 가지지 않는다. 추상 메서드는 자식 클래스에서 반드시 재정의(오버라이딩)해서 실행 내용을 채워야 한다.
'Language > JAVA' 카테고리의 다른 글
| [JAVA] 인터페이스 (0) | 2024.09.04 |
|---|---|
| [JAVA] 봉인된 클래스 (0) | 2024.09.04 |
| [JAVA] 상속2 (0) | 2024.09.04 |
| [JAVA] 상속 (0) | 2024.09.04 |
| [JAVA] 싱글톤 패턴 (0) | 2024.09.04 |