추상 클래스
: 미완성 설계도, 미완성 메서드를 갖고 있는 클래스
- 다른 클래스 작성에 도움 주기 위한 것으로, 인스턴스 생성 불가
- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능
abstract class Player { // 추상클래스
abstract void play(int pos); // 추상메서드
abstract void stop(); // 추상메서드
}
Player p = new Player(); // 에러!
class AudioPlayer extends Player {
void play(int pos) { ... } // 추상메서드 구현
void stop() { ... } // 추상메서드 구현
}
AudioPlayer ap = new AudioPlayer(); // OK
추상 클래스 작성법
- 여러 클래스에 공통적으로 사용될 수 있는 추상 클래스를 바로 작성하거나, 기존 클래스의 공통 부분을 뽑아서 추상 클래스를 만든다. → 코드의 중복 제거, 간결
- abstract가 붙으면 새로 정의하고 사용해야 한다는 것을 알아야 한다.
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 클래스로 정의한다
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 load() { 선택된 대상을 타게함 }
void unload() { 선택된 대상을 내리게함 }
}
Unit[] group = new Unit[3];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Dropship();
for(int i=0; i<group.length; i++)
group[i].move(100,200);
- 추상화된 코드는 구체화된 코드보다 변경에 유리하다.
GregorianCalendar cal = new GregorianCalendar(); // 구체적
Calendar cal = Calendar.getInstance(); // 추상적
728x90
반응형
'객체지향 OOP' 카테고리의 다른 글
[자바의정석 기초 객체지향 개념] 인터페이스 (0) | 2022.05.31 |
---|---|
[자바의정석 기초 객체지향 개념] 다형성 (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] 제어자 static, final, abstract / 접근 제어자 / 캡슐화 (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] package, import (0) | 2022.05.30 |
[자바의정석 기초 객체지향 개념] 참조변수 super, 생성자 super() (0) | 2022.05.30 |
댓글