Java 파트7-3. 추상 클래스

1. 추상 클래스


  • 실체 클래스(객체 생성용 클래스)들의 공통적인 특성(필드, 메소드)을 추출하여 선언한 것
  • 추상 클래스와 실체 클래스는 부모, 자식 클래스로서 상속 관계를 가짐

그림1

용도

  • 추상 클래스부터 만들고 실체 클래스를 만드는 것이 일반적
  • 실체 클래스에 반드시 존재해야할 필드와 메소드의 선언(실체 클래스의 설계 규격 - 객체 생성용이 아님)
  • 실체 클래스에는 공통된 내용은 빠르게 물려받고, 다른 점만 선언하면 되므로 시간 절약
  • 추상 클래스는 실체 클래스를 만들기 위한 설계 규격과 같은 역할을 한다고 생각

그림2

2. 추상 클래스 선언


abstract 키워드

  • 상속을 통해 자식 클래스만 만들 수 있게 만들었기에 부모로서의 역할만 수행한다. -> new 클래스() 가 불가능하다. -> 즉, abstract 키워드를 사용한 클래스는 직접 객체 생성이 불가능하다.
  • 추상 클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드를 선언할 수 있다.
  • 직접 객체를 생성할 수 없지만 자식 객체 생성될 때 객체화되어야 하기 때문에 생성자가 존재함
    • 자식 생성자에서 super() 형태로 추상 클래스의 생성자 호출
public abstract class 클래스명{
    // 필드
    // 생성자
    // 메소드
}


3. 추상 메소드와 재정의


  • 메소드 선언만 동일하고 실행 내용은 실체 클래스마다 달라야 하는 경우에 사용
  • abstract 키워드로 선언되고 중괄호가 없는 메소드
  • 추상 메소드를 상속받은 자식 클래스는 반드시 재정의(override)해서 실행 내용을 채워야 함 , 안하면 컴파일 에러 발생
abstract 리턴타입 메소드이름(매개변수,...);  // 중괄호 없음

// 예시
public abstract class Animal{
    public abstract void sound(); // 중괄호 없음, 즉 실행문이 없음 -> 재정의할 것이기에
}

그림3

분명 어떤 소리를 낼 것인데 상속 받는 클래스마다 실행 내용이 다르기 때문에 추상 메소드 사용


cf) 추상클래스와 인터페이스의 차이
여기까지 이해했으면 사실상 추상클래스와 인터페이스의 차이가 없는 것 같다. 추상 클래스 안에는 추상 메서드와 일반 메서드까지 포함이 가능하다. 하지만 인터페이스는 모든 메서드가 추상 메서드이다.

4. 정리하기


  • 추상 클래스 : 클래스들의 공통적인 필드와 메소드를 추출하여 선언한 클래스
  • 추상 메소드
    • 추상 클래스에서만 선언할 수 있고, 메소드의 선언부만 있는 메소드
    • 자식 클래스에서 반드시 재정의되어 실행 내용을 결정해야 함



본 포스팅은 ‘혼자 공부하는 자바’를 읽고 공부한 내용을 바탕으로 작성하였습니다.


© 2021. By Backtony