[JAVA] 추상클래스(Abstracat)
2024. 3. 7. 11:19ㆍWeb/JAVA
1. 추상 클래스(Abstract Class) 란?
- 일반적인 클래스는 구체적으로 데이터를 담아 인스턴스화 하는 클래스
- 특정 개발시점에 내용을 확정지으면 안되거나 계획(틀)만을 세울 때 추상적인 데이터를 담고있는 클래스
- 하나 이상의 추상 메소드를 보유함으로써 클래스를 불완전한 상태로 선언하여 서브 클래스로 하여금 메소드 오버라이드를 통해 추상메소드를 완성하도록 구현을 강제한다.
2. 특징
- 추상 메소드와 일반 메소드를 선언할 수 있다.
- 추상 클래스를 상속받는 모든 서브 클래스들은 추상 메소드를 반드시 재정의(강제구현)해야한다.
- new 연산자 사용을 통한 인스턴스화가 불가하다.
- 추상 클래스를 선언 할 때에는 abstract 키워드를 사용해야한다.
abstract class 클래스{
...
public abstract void 메서드();
}
3. 추상 클래스 생성자
- 반드시 추상 클래스를 어느 자식의 클래스에 상속시키고, 자식 클래스를 인스턴스화 하여 사용해야 한다.
- 직접적인 인스턴스화가 불가능하다 뿐이지, super() 메소드를 이용해 추상클래스 생성자 호출이 가능
// 추상 클래스
abstract class Shape {
public String type;
// 추상 클래스 생성자
public Shape(String type) {
this.type = type;
}
// 추상 메서드
public abstract void draw();
}
class Figure extends Shape {
public String name;
public Figure(String type1, String type2) {
super(type1); // 부모 추상 클래스 생성자 호출
name = type2;
}
@Override
public void draw() { ... } // 추상 메서드 구현
}
4. 추상 클래스 활용방법
- 공통 멤버의 통합으로 중복제거
- 상속 (extend) 기능을 사용해 부모 추상클래스로 묶으면, 중복제거, 코드 재사용성 증대 효과를 누릴수 있다.
class Tiger {
int x, y;
void move(int x, int y) {}
void stop() {}
void bite() {} //고유 행동 물기
}
class Panda {
int x, y;
void move(int x, int y) {}
void stop() {}
void eat() {} //고유 행동 먹기
}
class Horse {
int x, y;
void move(int x, int y) {}
void stop() {}
void run() {} //고유 행동 뛰기
}
abstract class Animal {
int x, y;
abstract void move(int x, int y); // 지정된 위치로 이동
void stop() {} // 현재 위치에 정지
}
class Tiger extends Animal{
void move(int x, int y) {
System.out.println("무섭게 이동")
}
void bite() {} // 고유 행동 물기
}
class Panda extends Animal{
void move(int x, int y) {
System.out.println("귀엽게 이동")
}
void eat() {} // 고유 행동 먹기
}
class Horese Animal{
void move(int x, int y) {
System.out.println("빠르게 이동")
}
void run() {} // 고유 행동 뛰기
}
- 하지만 굳이 추상 클래스로 선언할 필요가 없다. abstract 키워드를 빼고 일반 부모 클래스로 선언해도 상속하고 중복 멤버를 제거하는데 전혀 문제가 되지않는다.
- 그럼에도 추상 클래스로 사용하는 이유는 자식 클래스를 업캐스팅해서 다형성을 이용하여 프로그래밍 할때 필요하다.
'Web > JAVA' 카테고리의 다른 글
[JAVA] GC에 대하여 (1) | 2024.03.15 |
---|---|
[JAVA] 에러(Error) 와 예외 클래스(Exception) (0) | 2024.03.13 |
[JAVA] 멀티스레드 환경에서 문제와 대책 (0) | 2024.02.26 |
[JAVA] equals(), hashCode() (1) | 2024.02.26 |
[JAVA] 컴파일 과정 (0) | 2024.02.26 |