Java/Java

[Java] 추상 클래스(Abstract Class)란?

mingmongs 2025. 3. 14. 13:32

title

객체 지향 프로그래밍의 특징 중, 추상화(Abstration)에 대한 내용이 있다. 추상화의 핵심 개념은 "공통성과 본질을 모아서 추출"한다는 것인데, 추상 클래스가 무엇인지, 왜 사용하는지에 대한 내용을 알아보면서 객체 지향 프로그래밍의 추상화에 대한 개념도 함께 이해해보자.

1. 추상 클래스란?

: 추상 클래스(Abstract Class)는 클래스들의 공통되는 필드와 메소드를 정의한 클래스를 말한다.
추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성할 수 있게 된다.

1-1. 추상 클래스 선언 예시

public abstract class Player { ... }

1-2. 추상 메소드 선언 예시

public abstract void walk();

 

2. 추상 클래스의 특징

  • 추상 클래스 내부에 추상 메소드와 일반 메소드 둘 다 선언할 수 있음
  • 추상 클래스, 추상 메소드 선언 시 abstract 키워드를 사용해야함
  • 추상 클래스를 상속받는 모든 서브 클래스들은 추상 메소드를 반드시 재정의해야함(강제구현)
  • new 연산자 사용을 통한 인스턴스화가 불가능함

 

3. 추상 클래스 사용 이유

  • 공통된 필드와 메소드를 통일할 수 있음
  • 공통된 규격에 맞는 실체 클래스 구현에 용이함
  • 실체 클래스 구현시, 시간절약
  • 구현의 강제성을 통한 기능 보장이 가능
  • 객체지향적인 설계

 

4. 추상 클래스 선언

: class 앞에 "abstract" 예약어를 붙여 해당 클래스가 추상 클래스임을 나타낸다.

추상 클래스는 추상 메소드를 가지지 않아도 된다.
하지만 추상 메소드를 하나라도 가진다면 그 클래스는 추상 클래스가 된다.

추상 메소드를 선언했다면 자식 클래스는 해당 메서드를 반드시 구현하도록 강제된다.

또한 자바는 다중 상속을 지원하지 않기 때문에 여러 개의 추상 클래스를 상속할 수 없다.

추상 클래스는 static이나 final이 아닌 필드를 가질 수 있다.

예시

example1

 

5. 상속 클래스 선언

: 실체 클래스 구현을 위해 extends를 이용하여 추상 클래스를 상속받을 수 있다.
※ extends 이용, 단일 상속, 생성자 호출 등 일반적인 상속의 특성과 동일함

추상 클래스를 상속받은 클래스는 추상 클래스가 갖고 있는 추상 메소드를 반드시 구현(Overriding)해야 한다.

추상 클래스를 상속받고, 추상 클래스가 갖고 있는 추상 메소드를 구현하지 않으면 해당 클래스도 추상 클래스가 된다.

예시

example2

 

 

[reference]
https://www.tcpschool.com/java/java_polymorphism_abstract
https://velog.io/@gillog/Java-Abstract-Class%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4
https://limkydev.tistory.com/188
https://velog.io/@ung6860/JAVA%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
https://code-lab1.tistory.com/287

'Java > Java' 카테고리의 다른 글

[Java] XML Parsing 방식(DOM, SAX 방식)  (0) 2025.04.18
[Java] printStackTrace 취약점  (0) 2025.03.17
[Java] 문자열에서 문자 추출 charAt() 함수  (0) 2025.03.14
[Java] compareTo 함수  (0) 2025.03.14
[Java] replace, replaceAll 함수  (0) 2025.03.14