Java abstract 수식자 (abstract modifiers)
추상 메소드/추상 클래스 정의 – abstract 수식자
추상 메소드는 본체가 없고, 시그니쳐(메소드명이나 인수, 반환값)만으로 구성되는 메소드로 abstract
수식자를 부여해 정의한다. 특징으로 그대로는 이용할 수 없기 때문에 서브 클래스로 오버라이드(override) 하지 않으면 안된다. 이런 추상 메소드는 서브 클래스로 구현해야 하는 기능을 선언하기 위한 구조라고 할 수 있다.
추상 메소드를 포함하는 클래스를 추상 클래스라고 하며, 반듯이 abstract
수식자를 지정해야 한다.
예를 들어, 다음은 추상 클래스 ModAbstract
를 상속한 ModAbstractChild
클래스의 예이다.
ModAbstract.java
package com.devkuma.basic.modifier;
public abstract class ModAbstract {
abstract void test();
}
ModAbstractChild.java
package com.devkuma.basic.modifier;
public class ModAbstractChild extends ModAbstract {
void test() { /* ...구체적인 처리...*/ }
}
ModAbstractChild
클래스에서 void test()
메소드를 주석 처리하면 클래스에서 컴파일 오류가 발생한다. 추상 클래스를 상속하는 경우는 서브 클래스는 모든 추상 메소드를 오버라이드(override) 하지 않으면 안된다.
인터페이스와 같이 서브 클래스에 대해서 특정의 기능을 구현하는 것을 강제하는 위한 구조이지만, 구현을 가질 수 있다고 하는 점이 다르다1. 반면, 클래스이므로 다중 상속은 허용되지 않는다. 일반적으로는, 인터페이스를 우선적으로 이용하고, 공통적인 기능에 관심이 있는 경우에 추상 클래스를 이용하는 것으로 라고 하는 구분이 된다.
Note
인터페이스의 abstract 한정자interface
명령과 하위 메소드에서도 abstract
수식자를 부여할 수 있다. 그러나 인터페이스에서 모든 것이 추상 메서드라는 것이 정해져 있기 때문에 abstract
수식자도 생략하는 것이 일반적이다.
-
JavaSE 8부터는 인터페이스에서도 디폴트 구현을 가지는 것이 가능하게 되었다. ↩︎
최종 수정 : 2022-10-03