본문 바로가기

TIL

<자바 Java> 추상클래스

- 추상클래스 생성의 목적

개발 프로젝트에서 코드를 설계하는 사람과 코드를 직접 작성하는 사람이 따로 있다고 가정했을 때, 설계하는 사람은 코드를 작성하는 사람에게 클래스의 구조가 어떠해야 하는지 설명해야 한다. 이 때 보다 분명하고 확실하게 지침을 전달하기 위해 코드를 작성하는 사람이 만들어야 할 많은 클래스들 중 공통된 특징을 추려내어 추상클래스를 만들어서 전달해 줄 수 있다. 이렇게 하면, 클래스들 간의 공통되는 특징들 만큼은 정해진 규격을 따라 코드를 작성할 수 있기 때문에 여러모로 편리해진다. 이 때 추상클래스의 추상(abstract)이란, 실체 간에 공통되는 특성을 추출한 것을 뜻하는 단어로서 이처럼 클래스들 간의 공통되는 특징을 추출하여 만든 클래스를 추상클래스라고 한다.

 

 

- 추상클래스의 특징

추상클래스와 반대되는 개념은 실체클래스라고 할 수 있다. 실체클래스는 추상클래스를 상속하여 만들어지는데, 앞서 설명한 코드를 작성하는 사람이 만드는 클래스가 바로 이 실체클래스라고 할 수 있다. 이른바 '상속'되기 때문에, 실체클래스는 추상클래스의 필드와 메소드들을 물려받는다. 다만 추상클래스 내에서는, 추상클래스 자체가 실체클래스들의 존재를 전제로하여 만들어진 클래스이므로 실체클래스와는 그 성격이 다르다보니 직접 객체를 생성하지는 못한다. 따라서 추상클래스는 실체클래스를 만들기 위한 부모클래스로만 존재한다. 단, 실체클래스를 위해 생성자는 반드시 필요하다.

 

추상클래스를 만드는 방법은 다음과 같다.

public abstract class 클래스명 {}

추상클래스를 상속받는 실체클래스를 만드는 방법은 다음과 같다.

public class 클래스명 extends 추상클래스명 {}

 

 

- 오버라이딩(Overriding)

추상클래스의 성격에 따라 실체클래스가 가지고 있는 공통적인 특징을 추출하여 메서드를 가질 수 있는데, 이 때 추상클래스에 선언되는 메서드는 추상메서드로 작성할 수 있다. 추상메서드는 추상클래스에서만 선언이 가능하며, 메소드의 구체적인 실행 내용은 상속한 실체클래스마다 다르게 정의될 수 있기 때문에 비워둔다. 추상메서드의 가장 큰 특징은 반드시 상속하는 실체클래스에서 해당 메서드를 새로 정의(오버라이딩)해야 한다는 것인데, 하위 클래스가 반드시 실행할 필요가 있을 경우 이렇게 추상메서드로 작성하면 되는 것이다.

 

추상메서드를 만드는 방법은 다음과 같다.

public abstract 리턴타입 메서드명(매개변수);

 

 

 

 

 

참고 : 도서 <이것이 자바다>