추상클래스란?
추상 클래스
는 하나 이상의 추상 메서드를 포함하는 클래스로, 직접 인스턴스 를 생성할 수는 없지만 서브클래스에서 이를 상속받아 구현하도록 강제한다.
추상클래스의 특징
- 추상 메서드: 추상 클래스는 하나 이상의 추상 메서드를 포함한다. 추상 메서드는 구현되지 않은 메서드로, 서브 클래스에서 반드시 구현해야 한다. 이는 메서드의 시그니처만 정의되고, 메서드의 내용은 정의되지 않는다.
- 인스턴스화 불가: 추상 클래스는 직접 인스턴스를 생성할 수 없다. 인스턴스를 생성하려면 추상 클래스를 상속받아 모든 추상 메서드를 구현한 구체적인 서브 클래스를 만들어야 한다.
- 다형성 지원: 추상 클래스는 다형성을 지원한다. 동일한 인터ㅁ페이스를 공유하는 여러 서브클래스를 통해 다양한 객체를 다룰 수 있다.
- 공통기능 재사용: 추상 클래스는 서브 클래스에서 공통적으로 사용될 수 있는 기능을 정의하고, 서브 클래스는 이를 재사용하거나 확장할 수 있다.
※ 다형성: 객체 지향 프로그래밍 개념 중 하나로 동일한 인터페이스나 메서드가 다양한 방식으로 동작할 수 있도록 하는 특성
추상 클래스의 예
- 구체적인 예로 도형을 나타내는 클래스 계층 구조를 생각해보자. 각 도형은 공통적인 어떤 속성을 가지고 있다. 예를 들면, 위치, 회전 각도, 선 색상, 채우는 색 등의 속성은 모든 도형이 공유한다. 또한 도형의 기준점을 이동하는 메서드인 translate()는 모든 도형에서 동일하다. 따라서 이 속성들과 메서드는 추상 클래스인 Shape에 구체적으로 정의된다.
abstract class Shape {
int x, y;
public void translate(int x, int y) {
this.x = x;
this.y = y;
}
public abstract void draw();
};
class Rectangle extends Shape {
int width, height;
@Override
public void draw() {
System.out.println("사각형 그리기 메서드");
}
};
class Circle extends Shape {
int radius;
@Override
public void draw() {
System.out.println("원 그리기 메서드");
}
};
public class AbstractTest {
public static void main(String[] args) {
Shape s1 = new Rectangle();
Shape s2 = new Circle();
//Shape s3 = new Shape(); >> 오류가 난다 because 추상 클래스로는 객체를 생성할 수 없다.
s1.draw();
s2.draw();
}
}
D:\tools\jdk-21.0.1\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3\lib\idea_rt.jar=53252:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\workspace\java_lec\study\out\production\study ex06.example7.AbstractTest
사각형 그리기 메서드
원 그리기 메서드
Process finished with exit code 0
- 추상 클래스의 주요 목적은 일종의 템플릿이나 뼈대를 제공하여 하위 클래스가 필수적으로 구현해야 할 메서드를 정의하고, 공통된 기능을 제공하여 코드의 재사용성과 일관성을 높이는 데 있습니다.
요약하기
프로그램 추상화시킨다
*추상클래스
탈것
abstract run();
자동차 ex 탈것
run(){
달린다
}
비행기 ex 탈것
run(){
달린다
}
[class] 구체적인 것
[엔진] [탈것]
[자동차] has관계 (자동차는 엔진을 가지고 있다) #다형성은 is관계 (A는 B다)
>>자동차는 엔진을 상속할 수 없다.
엔진 --> 생성자 주입 --> 자동차
>>자동차는 탈것을 상속할 수 있다.
구체적으로 코드를 짠다
그 코드들이 하나의 타입으로 묶임
Share article