나는개발자니까
[Java] Chapter 7.3 추상 클래스 본문
추상 클래스의 개요
실체 클래스 : 객체를 직접 생성할 수 있는 클래스
추상 클래스 : 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스
추상 클래스가 부모 클래스, 실체 클래스가 자식 클래스로 구현되어 상속 관계를 가지고 있습니다. 실체 클래스는 추상 클래스의 모든 특성 (필드와 메소드)을 물려받고, 추가적인 특성을 가질 수 없습니다.
추상 클래스의 용도
1. 공통된 필드와 메소드의 이름을 통일할 목적입니다.
실체 클래스를 설계하는 사람이 여러 사람일 경우, 실체 클래스마다 필드와 메소드가 각각 다른 이름을 가질 수 있습니다. 데이터와 기능이 모두 동일함에도 불구하고 이름이 다르다 보니, 객체마다 사용 방법이 달라집니다. 따라서 추상 클래스를 사용하면 필드와 메소드 이름을 통일할 수 있습니다.
2. 실체 클래스를 작성할 때 시간 절약
공통적인 필드와 메소드는 추상클래스에 모두 선언해두고, 다른 점만 실체 클래스에 선언하면 실체 클래스를 작성하는데 시간을 절약할 수 있습니다.
예를 들면, 타이어 규격은 타이어의 추상 클래스라고 할 수 있고, 타이어 규격을 준수하는 한국 타이어나 금호 타이어는 추상 클래스에게 상속 받은 타이어의 실체 클래스입니다.
추상 클래스 선언
추상 클래스를 선언할 때에는 클래스 선언에 abstract 키워드를 붙입니다.
public abstract class 클래스 {
// 필드
// 메소드
// 생성자
}
추상 클래스는 new 연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식 클래스는 만들 수 있습니다.
따라서 자식 클래스에서 객체를 생성하여 자식 클래스의 메소드를 호출합니다.
추상 메소드와 재정의
추상 클래스는 실체 클래스의 필드와 메소드를 통일하는데 목적이 있습니다. 하지만 메소드의 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 하는 경우가 있습니다.
이런 경우를 위해 추상 클래스는 추상 메소드를 선언할 수 있습니다. 추상 메소드는 abstract 키우드와 함께 메소드의 선언부만 있고 메소드 실행 내용인 { }가 없는 메소드 입니다.
public abstract class Animal {
public abstract void sound();
}
추상 클래스에 추상 메소드를 선언하면 실체 클래스는 반드시 추상 메소드를 재정의해서 실행 내용을 작성해야 하고, 그렇지 않으면 컴파일 에러가 발생합니다.
즉, 실체 클래스에 반드시 실행 내용을 채우도록 강제하고 싶을 때 추상 메소드를 선언합니다.
추상클래스에서 상속받은 실체 클래스도 자식은 부모 타입으로 자동 타입 변환이 될 수 있고, 메소드가 재정의되어 있을 경우 재정의된 자식 메소드가 호출되는 다형성의 특징을 사용할 수 있다.
'Java' 카테고리의 다른 글
[Java] Chapter 8.2 인터페이스의 타입 변환과 다형성 (0) | 2023.04.24 |
---|---|
[Java] Chapter 8.1 인터페이스 (0) | 2023.04.17 |
[Java] Chapter 7.2 타입 변환과 다형성 (0) | 2023.04.10 |
[Java] Chapter 7.1 상속 (0) | 2023.04.06 |
[Java] 스택영역과 힙영역의 차이점 (0) | 2023.03.29 |