지난번에 인터페이스의 활용 이유에 대해서는 공부했는데
자바의 상속이라고 한다면 인터페이스 말고도 추상 클래스가 있다.
그래서 오늘은 추상클래스에 대해 머리속에 집어넣고자 포스팅한다!
추상클래스란?
추상클래스는 A, B, C 클래스들 간에 비슷한 필드와 메서드를 공통적으로 추출해 만들어진 클래스다.
예를 들면 자동차를 만드는 제조사는 여러군데다. 현대자동차, 테슬라, 벤츠 등등
이 자동차들은 겉모습, 엔진 이런건 전부 다를지만 '전진', '후진' 등 공통되는 액션을 한다.
이런 공통 액션, 다시 말해 공통 메서드들을 추출하여 둔 것이 추상클래스다.
뿐만 아니라 자동차라고 하면 기본적으로 엑셀과 브레이크 등등 있지 않은가?
이런 공통 필드 역시 추출하여 둔 것이 추상클래스이다.
자 그렇다면 추상 클래스를 객체로 구현할 수 없는 이유도 자동으로 알게 된다.
-> 이름으로 봐도 알듯이 '공통된 규격'들을 한데 모아놓은 것이 추상클래스고
-> 공통된 규격이 존재할 뿐이지 정확한 구현체, 실체가 존재하는 것이 아니기 때문에 객체로써 생성할 수 없는 것이다.
public class Main {
public static void main(String[] args) throws IOException{
Car car = new Car(); // 에러발생!!!
Genesis genesis = new Genesis(); // Genesis는 Car의 구현체이므로 객체 생성 가능
Car genesisCar = new Genesis(); // 다형성 때문에 얘도 가능
}
public abstract static class Car {
public void goFront(){
}
public void goBack(){
}
public void stop(){
}
}
public static class Genesis extends Car {
}
}
추상클래스를 쓰는 이유
그래서 공통 메서드, 공통 필드를 추출해놓은게 추상클래스인건 알겠는데 왜 필요한걸까?
1. 공통 필드와 메서드 통일 목적
10개의 자동차를 구현하라고 했을 때 10개를 각각 개발하는 것 보다는
자동차의 기본 기능이 담긴 추상 클래스를 상속받아 개별 기능을 구현하는게 훨씬 편할 것이다.
-> 필드, 메서드 이름을 통일하여 유지보수성을 높이고 통일성 유지가 가능해진다!
2. 실체 클래스 구현 시, 시간 절약
자식 클래스가 부모 클래스 (추상 클래스) 를 상속 받으면 자동으로 공통되는 메서드 필드가 오버라이딩되게 된다.
따라서 실체 클래스 구현 시에, 주어지는 필드와 메서드를 가지고 원하는대로 구현하면 된다.
구현에만 집중하면되고 어느정도 시간 절약이 가능해지는 것!
강제 상속
강제 상속이란 것은 그냥 내가 이름 붙인건데, 사실 자식 클래스는 부모 클래스로 상속을 받아도
그 메서드 재정의 안해도 되긴 한다. 실행해도 에러같은거 안난다.
근데? 상속 받는 자식 클래스한테 이거는 꼭 오버라이딩해라 하고 강제성을 부여할 수 있는 방법이 있다.
바로 부모 클래스의 메서드에 abstract를 붙이는 것.
만약 Genesis가 Car의 goFront를 오버라이딩 하지 않는다면 에러가 발생하게 된다.
public class Main {
public static void main(String[] args) throws IOException{
Genesis genesis = new Genesis();
Car genesisCar = new Genesis();
}
public abstract static class Car {
public abstract void goFront();
public void goBack(){
}
public void stop(){
}
}
public static class Genesis extends Car {
@Override
public void goFront() {
}
}
}'Java' 카테고리의 다른 글
| String에 대해 알게된 것 기록 (0) | 2025.03.25 |
|---|---|
| 자바 : 상속 (0) | 2024.02.13 |
| 자바 : static, final (0) | 2024.02.12 |
| 자바 : 객체 배열과 메소드 (0) | 2024.02.09 |
| 자바 : 생성자 (0) | 2024.02.07 |