[Java] 7. 객체지향 프로그래밍 2 #6 추상클래스(abstract class)
2022. 5. 8. 14:47ㆍJAVA/Language
1. 추상 클래스란 무엇인가?
- 추상 클래스는 추상 메서드가 포함된 클래스
- 클래스를 설계도에 비유한다면 추상 클래스는 미완성 설계도에 비유할 수 있음
- 추상 클래스를 상속받는 자손 클래스들이 추상 메서드드를 오버라이딩하여 재정의함
- 예를 들어 TV 클래스가 존재한다면 TV 클래스를 상속받는 LgTV 클래스와 SamsungTV 클래스는 어느정도의 기능(ON/OFF, 채널 변경, 소리 변경 등)이 동일함을 알 수 있습니다. 하지만 제조사마다 내부 로직은 다르므로 추상 클래스를 정의함으로써 제조사마다 다르게 정의할 수 있도록 합니다.
추상 클래스의 선언 방법
abstract class 클래스이름{
...
}
2. 추상 메서드(abstract method)
- 추상 메서드는 추상 클래스의 메서드에 abstract 키워드를 선언하여 추상 메서드를 선언함
- 추상 메서드의 특징은 메서드의 선언부(제어자, 리턴타입, 메서드이름, 매개변수 타입 및 개수 등)만 작성 구현부는 작성하지 않음
- 추상 클래스를 상속받은 자손 클래스들은 추상 메서드들을 구현해야함
추상 메서드 선언
/* 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명 */
abstract 리턴타입 메서드이름();
추상 클래스와 추상 메서드의 구현
abstract class Player{
abstract void play(int pos); // 추상 메서드
abstract void stop(); // 추상 메서드
}
class AudioPlayer extends Player{
void play(int pos){ // 추상 메서드를 구현
// 내용 생략
}
void stop(){ // 추상 메서드를 구현
// 내용 생략
}
}
abstract class AbstractPlayer extends Player{
void play(int pos){ // 추상 메서드를 구현
// 내용 생략
}
}
3. 추상 클래스의 작성
추상화란 무엇인가?
- 기존의 클래스의 공통부분을 추출하여 조상 클래스를 만드는 것
- 반대로 구체화는 상속을 통해서 클래스를 구현, 확장하는 작업을 의미함
추상 클래스 작성 예제
https://github.com/yonghwankim-dev/java_study/tree/main/toy/toy_02_player
왜 조상 클래스의 메서드를 일반 메서드가 아닌 추상 메서드로 정의해야 하는가?
class Player{
...
void play(int pos){
// 공백으로 둠
}
void stop(){
// 공백으로 둠
}
}
- 자손 클래스가 오버라이딩하여 재정의하지 않을 수 있음
- 자손 클래스 입장에서는 이미 정의된 메서드라고 인식할 수 있음
- 자손 클래스가 호출하지 말아야할 메서드를 호출할 수 있음
- 즉, 자손 클래스가 오버라이딩하여 재정의 하도록 강제하기 위해서는 추상 메서드로 선언해야함
References
source code : https://github.com/yonghwankim-dev/java_study
Java의 정석, 남궁 성 지음
'JAVA > Language' 카테고리의 다른 글
[Java] 7. 객체지향 프로그래밍 2 #8 내부 클래스(Inner Class) (0) | 2022.05.23 |
---|---|
[Java] 7. 객체지향 프로그래밍 2 #7 인터페이스(interface) (0) | 2022.05.11 |
[Java] 7. 객체지향 프로그래밍 2 #5 다형성(polymorphism) (0) | 2022.05.06 |
[Java] 7. 객체지향 프로그래밍 2 #4 제어자(modifier) (0) | 2022.05.05 |
[Java] 7. 객체지향 프로그래밍 2 #3 package와 import (0) | 2022.05.03 |