추상화란?
기존 클래스의 공통부분을 뽑아 부모 클래스를 만드는 것을 의미한다.
상속 계층을 보면 내려갈수록 구체화되어 있고, 올라갈수록 추상화되어있다. 다시 말하자면, 내려갈수록 세분화되어 있고, 올라갈수록 공통요소만 남는다.
자바에서 추상화의 예로 추상 클래스, 추상 메서드, 인터페이스를 들 수 있다.
추상 클래스?
: 추상 메서드를 가지고 있는 클래스. 미완성 설계도. 미완성이기 때문에 인스턴스를 생성할 수 없다.
추상 메서드?
선언부만 있고, 구현부는 없는 메서드. 미완성 메서드
자식 클래스에서 오버라이딩을 통해 구현부를 완성시켜야한다.
class Marine{
int x, y;
void move(int x, int y){...}
void stop(){...}
void stimPack(){...}
}
class Tank{
int x, y;
void move(int x, int y){...}
void stop(){...}
void changeMode(){...}
}
class Dropship{
int x, y;
void move(int x, int y){...}
void stop(){...}
void load(){...}
void unload(){...}
}
다음과 같이 게임에 나오는 유닛들을 클래스로 정의하였다.
공통부분을 뽑아내어 Unit 추상 클래스를 만들고 Unit 클래스를 상속받도록 작성해보자.
abstract class Unit{//추상 클래스
int x, y;
abstract void move(int x, int y);//추상 메서드
void stop(){...}
}
class Marine extends Unit{
void move(int x, int y){...}
void stimPack(){...}
}
class Tank extends Unit{
void move(int x, int y){...}
void changeMode(){...}
}
class Dropship extends Unit{
void move(int x, int y){...}
void unload(){...}
}
stop메서드는 선언부와 구현부 모두 같다.
하지만 Marine, Tank는 지상 유닛이고, Dropship은 공중유닛이기 때문에 이동하는 방법이 달라서 move메서드의 구현부 내용은 다를 것이다. 이렇게 선언부는 같지만 구현부는 다른 메서드는 추상 메서드로 작성할 수 있다.
이제 다른 유닛들을 추가하려면 Unit 클래스를 상속받아 작성하면 된다.
아예 처음부터 작성하는 것보단 공통적인 부분을 가지고 있는 추상 클래스를 상속받아 아직 미완성인 부분을 완성해나가며 작성하는 것이 더 효율적이다.
'Java' 카테고리의 다른 글
[Java] 다형성 (0) | 2022.10.13 |
---|---|
[Java] 캡슐화 (0) | 2022.10.11 |
[Java] 인터페이스 (0) | 2022.09.24 |
[Java] Eclipse 한글 깨짐 해결하기 (0) | 2022.06.09 |
댓글