본문 바로가기
객체지향 OOP

[자바의정석 기초 객체지향 개념] 추상클래스

by bzerome240 2022. 5. 30.

추상 클래스

: 미완성 설계도, 미완성 메서드를 갖고 있는 클래스

  • 다른 클래스 작성에 도움 주기 위한 것으로, 인스턴스 생성 불가
  • 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능
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
반응형

댓글