1. 추상 클래스란?
추상이란 실체 간에 공통되는 특성을 추출한 것을 말한다. 예를 들어, 우리는 개, 고양이, 햄스터 등의 실체에서 동물이라는 공통되는 특징을 추출할 수 있다. 이런 관계가 클래스에서도 존재하는다. 우리는 객체를 직접 샌서알 수 있는 클래스(개, 고양이, 햄스터 등)을 "실체 클래스"라고 부르며 이 클래스들의공통된 특성을 추출하여 선언한 클래스를 "추상 클래스"라고 부른다. 이때 실체 클래스는 추상 클래스를 상속받아 구현된다. 추가적으로 추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성하여 사용할 수 없다.
Animal animal = new Animal() // 불가능
추상 클래스는 아래와 같은 목적을 가지고 사용한다.
- 실체 클래스들의 공통된 필드, 메서드 이름 통일
- 실체 클래스를 작성할 때의 시간 절약
2. 추상 클래스의 선언 방법 (+ 추상 메서드)
추상 클래스는 클래스 선언시 abstract 키워드를 붙여 선언할 수 있다. 즉, 기본 구조는 아래와 같다.
public abstract class 클래스{
// 필드
// 생성자
// 메서드
}
추상 클래스는 위에서 설명한 것과 같이 객체 생성이 불가능하여 new 연산자를 사용할 일이 없다. 따라서 생성자가 필요없다고 생각할 수 있다. 하지만 실체 클래스들이 추상 클래스를 상속 받아 구현되면 실체 클래스의 객체 생성 과정에서 추상 클래스의 생성자가 호출되어야 하기 때문에 생성자도 정의해줘야 한다. 아래는 실제 추상 클래스 코드 예시다.
public abstract class Car {
String constructor;
String owner;
public Car() {}
public Car(String constructor, String owner) {
this.constructor = constructor;
this.owner = owner;
}
public void printCarInfo() {
System.out.println("Constructor: "+this.constructor);
System.out.println("Owner: "+this.owner);
}
public abstract void printCarSound();
}
위 코드에서 자세히 살펴봐야할 부분은 가장 아래의 "public abstract void printCarSound();" 부분이다. 이렇게 abstract를 통해 선언한 메서드를 "추상 메서드"라고 부른다. 프로젝트를 진행하다 보면 어떠한 메서드는 모든 클래스에서 다르게 구현하고 싶을 수 있다. 즉, 추상 클래스를 상속 받는 하위 클래스에서 실행 내용을 채우도록 강제하고 싶은 메서드가 있는 경우 우리는 추상 메서드를 사용한다. 추상 메서드는 추상 클래스에서만 선언가능하며 위와 같이 중괄호 {}를 제외하고 선언한다.
'Java' 카테고리의 다른 글
[Java] java.util.Date를 java.sql.Date로 변환하기 (0) | 2023.01.31 |
---|---|
[Java] Getter/Setter의 사용 이유 (0) | 2023.01.30 |
[Java] Final, Static final (0) | 2023.01.30 |
[Java] Singleton (0) | 2023.01.30 |
[Java] Static (0) | 2023.01.30 |