추상 클래스(Abstract Class)는 추상 메서드(Abstract Method)를 갖고 있는 클래스를 말합니다.

여기서 추상 메서드란 실질적인 구현을 갖지 않고 메서드 선언만 있는 경우를 말합니다.

추상 클래스를 선언하는 방법은 abstract 지정어를 클래스 앞에 사용합니다. 추상 메서드 또한 마찬가지로 abstract 지정어를 사용하여 선언합니다.

예를 들어, 다음과 같은 경우를 말합니다.

abstract class AbstractClass {
	public abstract void methodA();
    
    void methodB() {
    	...
    }
}

위의 코드에서 methodA()를 추상 메서드라고 말합니다. abstract 지정어에 구현부를 갖지 않고 선언부만 있기 때문입니다.

반면에 methodB() 메서드는 구현이 있는 메서드이므로 추상 메서드가 아닙니다.

클래스 AbstractClass는 methodA()라는 추상 메서드를 가지고 있어 추상 클래스라고 할 수 있습니다. 추상 클래스는 추상 메서드를 단 한 개라도 가지고 있으면 됩니다.

하지만, 이 추상 클래스는 객체를 가질 수 없습니다. 즉, new를 통해 인스턴스화를 할 수 없습니다. 이 추상 클래스는 반드시 하위 클래스에서 모든 추상 메서드를 구현한 후에 객체를 생성할 수 있습니다.

다시 말하면, 추상 클래스는 구현을 완료하지 않고 외형만을 제공하므로 반드시 다른 클래스에 의해 상속된 후에 사용되어야 합니다.

abstract class AbstractClass {
	public abstract void methodA();
    void methodB() {
    	System.out.println("methodB()....");
    }
}

class subClass extends AbstractClass {
	@Override
    public void methodA() {
    	System.out.println("methodA()....");
    }
}

public class AbstractClassTest {
	public static void main(String[] args) {
    	SubClass obj = new SubClass();
        obj.methodA();
        obj.methodB();
    }
}

결과

methodA()....
methodB()....

위의 코드는 추상 클래스를 이용한 코드입니다.

일반적으로 추상 클래스에서는 추상 메서드만을 제공하며, 그 메서드에 대한 실질적인 구현은 추상 클래스를 상속하는 하위 클래스에 따라 달리집니다. 이러한 기법은 다른 외부 클래스에서 메서드를 사용할 때, 일관성 있게 다루기 위한 방법입니다.

이상으로 자바에서 사용하는 추상 클래스에 대해서 간단하게 알아봤습니다.

profile
꾸준함으로 성장하는 개발자 지망생

0개의 댓글