JAVA/JAVA 기본정리

추상클래스 (abstract class) / 추상 메서드 (abstract method)

hyun-1200 2022. 6. 8. 18:31

📌 추상클래스 (abstract class) 

: 미완성된 클래스 

 

 

  • 추상클래스로 인스턴스를 생성할 수 없다.
  • 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. 

추상클래스 자체로는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서 중요한 의미를 갖는다. 새로운 클래스를 작성할 때 아무 것도 없는 상태에서 시작하는 것보다는 완전하지는 못하더라도 어느정도 틀을 갖춘 상태에서 시작하는 것이 나을 것이다.

 

추상 클래스 선언하는 방법

- 클래스 선언부의 abstract를 보고 이 클래스에는 추상메서드가 있으니 상속을 통해서 구현해주어야 한다고 쉽게 알 수 있다/ 

abstract class 클래스 이름{
		...
}
  • 추상클래스에도 생성자가 있으며, 멤버변수와 메서드도 가질 수 있다. 

📌 추상메서드 (abstract method) 

: 미완성된 메서드

-메서드는 선언부와 구현부로 구성되어있으나, 추상메서드는 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔다.

 

추상 메서드 선언하는 방법

/* 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다.*/
abstract 리턴타입 메서드이름();

 

 

abstract class Player{ // 추상 클래스
	abstract void play(int pos); // 추상 메서드
    abstract void stop(); // 추상 메서드
}

class AudioPlayer extends Player{
	void play(int pos) { /* 추상 메서드를 구현한다. */ }
    void stop()  { /* 추상 메서드를 구현한다. */ }
}

// 조상클래스로부터 상속받은 추상메서드 중 stop을 구현하지 않았으니, 추상 클래스로 지정해줘야한다.
abstract class AbstractPlayer extends Player{
	void play(int pos) { /* 추상 메서드를 구현한다. */ }

}
  • 추상 클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해주어야 한다.
  • 만일 조상으로부터 상속받은 추상메서드 중 하나라도 구현하지 않는다면, 자손 클래스 역시 추상클래스로 지정해줘야 한다. 

 

굳이 abstract를 붙여서 추상메서드로 선언하는 이유는

  • 자손 클래스에서 추상메서드를 반드시 구현하도록 강요하기 위해서이다.

만일 추상메서드로 정의되어 있지 않고 빈 몸통만 가지도록 정의되어 있다면, 상속받는 자손 클래스에서는 이 메서드들이 온전히 구현된 것으로 인식하고 오버라이딩을 통해 자신의 클래스에 맞도록 구현하지 않을 수도 있기 때문이다.