미니 프로젝트(계산기)를 하면서 추상클래스에 대해 아직 헷갈리는 부분이 있어 정리하게 됐다.
추상클래스란?
추상 클래스(abstract class)는 여러 실체 클래스(구체적인 클래스)의 공통적인 부분(변수, 메서드)을 추출하여 선언한 클래스다.
사실 학습하면서 이렇게 이론만으로는 추상 클래스가 정확히 어떤 것인지 감이 잡히지 않았다.
그래서 먼저 "추상"이라는 단어의 의미를 정확히 이해하는 것이 중요하다고 생각하여 정의를 찾아보았다.
추상의 의미
먼저 "추상"이라는 단어는 공통적인 특징을 뽑아내어 개념화하는 것을 의미한다.
즉 여러 개의 구체적인 각 대상에서 서로 공통된 특징을 뽑아내어 하나의 개념으로 정리 하는 것이다.
그림으로 보면 이해하기 쉽다.
- 추상 클래스: 'Animal'은 모든 동물의 공통된 개념이다.
- 구체 클래스: 'Dog'과 'Cat'은 Animal에서 상속받아 각각의 특징을 가진 클래스로 구체화한다.
- 실제 객체: 'Golden Retriever', 'Bulldog' 등 개별적인 실체를 나타낸다.
즉 추상화의 개념을 가지고 프로그래밍에 적용 한다면, 여러 개의 실체 클래스(강아지, 고양이 등)가 공통으로 가지는 속성과 동작을 뽑아내어 "추상 클래스"로 만들고, 이를 기반으로 각 실체 클래스를 구체적으로 구현하는 방식이라고 생각하면 된다.
정리하면
추상 클래스(부모) → 공통적인 설계도 (구체적인 내용 일부는 비워둠)
실체 클래스(자식) → 추상 클래스를 상속받아 직접 구현 (비워둔 부분을 채움)
추상 클래스 사용 예시 - 계산기로 구현
1. 추상 클래스 정의
// 추상 클래스: 기본적인 계산 기능을 정의
abstract class Calculator {
// 두 숫자를 입력받아 계산하는 추상 메서드 (구현은 서브클래스에서)
abstract int calculate(int a, int b);
}
- Calculator는 추상 클래스이며, 추상 메서드 calculate()를 가지고 있다.
- 이 메서드는 구현되지 않았고, 상속받은 클래스에서 구현해야 한다.
2. 덧셈, 뺄셈을 구현하는 구체적인 클래스
// 덧셈 클래스: Calculator를 상속받아 계산 기능 구현
class AddCalculator extends Calculator {
@Override
int calculate(int a, int b) {
return a + b;
}
}
// 뺄셈 클래스: Calculator를 상속받아 계산 기능 구현
class SubtractCalculator extends Calculator {
@Override
int calculate(int a, int b) {
return a - b;
}
}
- AddCalculator는 덧셈 기능
- SubtractCalculator는 뺄셈 기능
3. 메인 클래스에서 사용
public class Main {
public static void main(String[] args) {
Calculator addCalc = new AddCalculator(); // 덧셈 계산기 객체 생성
Calculator subCalc = new SubtractCalculator(); // 뺄셈 계산기 객체 생성
System.out.println("10 + 5 = " + addCalc.calculate(10, 5)); // 15 출력
System.out.println("10 - 5 = " + subCalc.calculate(10, 5)); // 5 출력
}
}
추상 클래스 (Calculator)
- 공통 기능을 정의하지만 직접 인스턴스를 생성할 수 없다.!
구체적인 클래스 (AddCalculator, SubtractCalculator)
- 상속받아 calculate() 메서드를 오버라이딩하여 구현한다.
추상 클래스 요약
추상 클래스란?
- 추상 클래스는 여러 실체 클래스들이 공통적으로 가지는 속성(변수)과 동작(메서드)을 추출하여 정의한 클래스이다.
추상 클래스는 객체를 생성할 수 없다
- 추상 클래스는 아직 구체적인 구현이 부족하기 때문에 직접적으로 객체를 생성할 수 없다.
- 추상 클래스는 상속을 통해서만 사용되며, 그 기능을 완성한 실체 클래스가 추상 클래스를 상속하여 객체를 생성할 수 있습니다.
추상 클래스와 실체 클래스의 관계
- 추상 클래스와 실체 클래스는 상속 관계이다.
'JAVA' 카테고리의 다른 글
JAVA - 동등성과 동일성 (0) | 2025.03.12 |
---|---|
JAVA - 키오스크 과제(Lv1, Lv2) (0) | 2025.03.10 |
JAVA - Optional (0) | 2025.03.06 |
JAVA 계산기 트러블 슈팅 (3) | 2025.03.05 |
JAVA - Enum (0) | 2025.03.05 |