본문 바로가기
공부/자바

추상 클래스(abstract class)

by xladmt 2024. 5. 31.

추상 클래스란?

클래스가 설계도라면, 추상 클래스란 미완성 설계도라고 할 수 있다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성할 수 없다. 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. 추상클래스는 키워드 'abstract'를 붙이기만 하면 된다. 클래스 선언부의 abstract를 보고 이 클래스에는 추상 메서드가 있으니 상속을 통해서 구현해주어야 한다는 것을 쉽게 알 수 있다. 추상클래스에도 생성자가 있으며, 멤버변수와 메서드도 가질 수 있다. 

* 추상메서드를 포함하고 있지 않은 클래스에도 키워드 'abstract'를 붙여서 추상클래스로 지정할 수도 있다. 추상메서드가 없는 완성된 클래스라 할지라도 추상클래스로 지정되면 클래스의 인스턴스를 생성할 수 없다.

 

추상 메서드란?

선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상 메서드이다. 추상 메서드 역시 키워드 'abstract'를 앞에 붙여 주고, 추상메서드는 구현부가 없으므로 괄호 대신 문장의 끝을 알리는 ';'을 적어준다.

abstract 리턴타입 메서드이름();

 

=> 미완성 상태로 남겨 두는 이유는?

메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만을 작성하고, 주석을 덧붙여 어떤 기능을 수행할 목적으로 작성되었는지 알려 주고, 실제 내용은 상속받는 클래스에서 구현하도록 비워 두는 것이다.

 

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

 

 

[참고]

Java의 정석 (남궁성 저)

'공부 > 자바' 카테고리의 다른 글

내부 클래스(inner class)  (0) 2024.06.01
인터페이스(interface)  (0) 2024.05.31
다형성(polymorphism)  (0) 2024.05.31
제어자(modifier)  (0) 2024.05.31
Package & import  (0) 2024.05.31