추상클래스란?
추상 클래스
는 하나 이상의 추상 메서드를 포함하는 클래스로, 직접 인스턴스 를 생성할 수는 없지만 서브클래스에서 이를 상속받아 구현하도록 강제한다.
추상클래스의 특징
- 추상 메서드: 추상 클래스는 하나 이상의 추상 메서드를 포함한다. 추상 메서드는 구현되지 않은 메서드로, 서브 클래스에서 반드시 구현해야 한다. 이는 메서드의 시그니처만 정의되고, 메서드의 내용은 정의되지 않는다.
- 인스턴스화 불가: 추상 클래스는 직접 인스턴스를 생성할 수 없다. 인스턴스를 생성하려면 추상 클래스를 상속받아 모든 추상 메서드를 구현한 구체적인 서브 클래스를 만들어야 한다.
- 다형성 지원: 추상 클래스는 다형성을 지원한다. 동일한 인터ㅁ페이스를 공유하는 여러 서브클래스를 통해 다양한 객체를 다룰 수 있다.
- 공통기능 재사용: 추상 클래스는 서브 클래스에서 공통적으로 사용될 수 있는 기능을 정의하고, 서브 클래스는 이를 재사용하거나 확장할 수 있다.
※ 다형성: 객체 지향 프로그래밍 개념 중 하나로 동일한 인터페이스나 메서드가 다양한 방식으로 동작할 수 있도록 하는 특성
추상 클래스의 예
- 구체적인 예로 도형을 나타내는 클래스 계층 구조를 생각해보자. 각 도형은 공통적인 어떤 속성을 가지고 있다. 예를 들면, 위치, 회전 각도, 선 색상, 채우는 색 등의 속성은 모든 도형이 공유한다. 또한 도형의 기준점을 이동하는 메서드인 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