본문 바로가기

프로그래밍언어/JAVA

[JAVA] 추상클래스 (abstract class)

반응형

1. 추상클래스

추상클래스는 추상메서드를 포함하고 있는 클래스이다. 추상메서드는 메서드의 내용이 구현되어 있지 않기 때문에 상속을 통해서 메서드를 구현해 주어야 한다. 그렇기 때문에 추상클래스를 통해서 인스턴스를 생성할 수 없다.

추상클래스 자체로는 인스턴스를 생성하는 등의 클래스로서의 역할을 다 하지 못하지만, 새로운 클래스를 작성하는데 있어서 설계의 기반이 되는 조상 클래스로서의 역할을 할 수 있다.

추상클래스는 클래스 선언부에 abstract 키워드를 붙여서 선언한다. 이 키워드를 통해서 해당 클래스의 추상메서드를 구현해주어야 한다는 것을 알 수 있다.

 

abstract class ClassName { ... }

 

추상클래스는 추상메서드를 포함할 수 있다는 것을 제외하고는 일반 클래스와 동일하다. 생성자를 비롯해서 멤버변수와 메서드 등을 가질 수 있다.

추상클래스는 무조건 추상메서드를 가질 필요는 없다. 하지만 추상클래스로 선언되면 추상메서드가 없어도 추상클래스를 통해 인스턴스를 생성할 수 없다.


2. 추상메서드

메서드는 선언부와 구현부로 구성되어 있다. 추상메서드는 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 메서드를 의미한다. 이와같이 선언부만 작성해놓은 이유는 구현부가 상속받는 클래스에 따라 달라질 수 있기 때문이다. 그렇기 때문에 해당 메서드의 구현부는 자손 클래스에서 상속받아 작성해야 한다.

 

// abstract 키워드를 붙여 메서드를 선언한다.
// 구현부는 작성하지 않고 바로 세미콜론으로 문장을 마친다.
abstract void methodName();

 

상속받은 클래스는 해당 메서드를 오버라이딩하여 구현부를 작성한다.


3. 추상클래스의 작성

상속이 조상 클래스를 사용하여 자손 클래스를 만드는 것이라면, 추상화는 반대로 자손 클래스들의 공통점을 추출하여 조상 클래스로 만들어 주는 것이다. 추상클래스는 이러한 추상화의 과정을 통해서 자손 클래스들이 공통적으로 사용할 메서드들을 포함하게 된다.

사실 조상 클래스를 만들 때 굳이 abstract 키워드를 사용하여 추상클래스로 선언할 이유는 없다. 일반 클래스에 메서드를 포함하여 구현한 후에 자손 클래스에서 해당 메서드를 오버라이딩하기만 하면 되기 때문이다. 하지만 abstract 키워드를 사용하는 이유는 자손 클래스에게 추상메서드의 구현을 강제하기 위함이다.

만약 추상클래스로 생성하지 않은 경우에는 자손클래스에서 해당 메서드를 정상 메서드로 판단하고 오버라이딩하지 않아 해당 기능이 동작하지 않을 수 있다. 이러한 부분을 방지하고자 abstract 키워드를 사용하여 추상메서드의 구현을 강제하고 있다.

반응형

'프로그래밍언어 > JAVA' 카테고리의 다른 글

[JAVA] 내부 클래스 (Inner class)  (0) 2021.11.29
[JAVA] 인터페이스 (Interface)  (1) 2021.11.23
[JAVA] 다형성 (Polymorphism)  (0) 2021.11.19
[JAVA] 제어자 (Modifier)  (0) 2021.11.16
[JAVA] 자바 패키지  (0) 2021.11.08