Java | 추상 클래스

Lumpen·2025년 4월 11일
0

Java

목록 보기
15/38

다형성만을 통해 작성한 클래스에는 2가지 중요한 문제점이 있다

1. 부모 클래스의 인스턴스를 생성할 수 있다

개, 고양이, 소 등의 실체가 존재하는 것에 대한 인스턴스 생성은 당연하지만
동물이라는 추상적 개념에 대해 실체로 존재할 필요는 없다
동물 클래스에는 기능 또한 완벽히 정의되어 있지 않을 것이다
이 때 부모 클래스의 인스턴스를 만들어 사용한다면 기대하는 기능을 하지 못할 가능성이 크다
특히 부모 클래스는 메모리에서 자식 클래스와 함께 생성되지 않기 때문에
어떤 기능도 제대로 못할 것이다

2. 자식 클래스에서 메서드 오버라이딩을 하지 않을 가능성

부모 클래스의 메서드는 자신을 상속 받은 자식이 메서드 오버라이딩을 할 것임을
기대하고 만들어졌을 가능성이 크다
그렇지만 모든 자식에서 메서드 오버라이딩을 하지 않는다면 제대로된 기능을 하지 못하게 된다

추상 클래스와 추상 메서드를 활용하여 위 두 가지의 문제를 해결할 수 있다

추상 클래스

동물 같이 어떤 집합에 대한 개념을 표현한 클래스는 추상 클래스로 만들 수 있다
추상 클래쓰는 부모로써 클래스의 역할을 하지만
실제 인스턴스로 생성되지 않고 오직 상속만을 목적으로 한다

abstract class Animal {

}
  • 추상 클래스는 부모 역할을 하기 위한 클래스
  • new 키워드로 직접 인스턴스를 생성할 수 없다는 제약이 추가된 클래스

추상 메서드

부모 클래스를 상속 받는 자식 클클래스에서 반드시 오버라이딩 해야 하는 메서드를
부모 클래스에서 정의할 수 있고 이를 추상 메서드라고 한다
메서드 선언부에 메서드 바디가 없다

  • 추상 메서드가 하나라도 있는 클래스는 추상 클래스가 되어야 한다
  • 자식 클래스가 반드시 오버라이딩 하여 사용한다
  • 추상 메서드를 오버라이딩 하지 않으려면 자식도 추상 클래스가 되어야 한다

위 제약들을 제외하면 추상 클래스는 모두 일반 클래스와 동일하다
추상 클래스는 제약이 추가된 클래스일 뿐이므로
메모리 구조, 실행 결과 모두 동일하다

순수 추상 클래스

순수 추상 클래스: 모든 메서드가 추상 메서드인 추상 클래스 (부모에는 기능이 없다)

  • 순수 추상 클래스를 상속 받으면 모든 기능을 오버라이딩 해야 한다
  • 실행 로직을 전혀 가지고 있지 않으므로 다형성을 위한 부모 타입으로의 껍데기 역할만 한다
profile
떠돌이 생활을 하는. 실업자, 부랑 생활을 하는

0개의 댓글