7장 추상(abstract)

slee2·2021년 9월 8일
0

Java의 정석

목록 보기
13/28
post-thumbnail
post-custom-banner

추상 클래스(abstract class)

  • 미완성 설계도. 미완성 메서드를 갖고 있는 클래스
abstract class	Plyaer {	// 추상클래스(미완성 클래스)
	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.
Player		ap = new AudioPlayer();	// OK.

추상 메서드(abstract method)

  • 미완성 메서드. 구현부(몸통, {})가 없는 메서드
abstract 리턴타입 메서드이름();
  • 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
abstract class	Player {	// 추상 클래스
	abstract void	play(int pos);	// 추상 메서드
   	abstract void	strop();	// 추상 메서드
}

---- 추상 메서드를 2개를 받고 전부 구현했으므로 아직 완성 클래스 ----
class	AudioPlayer extends Player {
	void	play(int pos) {}	// 추상메서드를 구현
   	void	stop() {}		// 추상메서드를 구현
}

---- 추상 메서드를 2개를 받았지만 하나만 구현했으므로 아직 미완성 클래스 ----
abstract class	AbstractPlayer extends Player {
	void	play(int pos) {}	// 추상메서드를 구현
}
  • 추상 메서드 호출 가능(호출할 때는 선언부만 필요)
abstract class	Player {
	boolean	pause;		// 일시정지 상태 저장
   	int	currentPos;	// 현재 Play되고 있는 위치 저장

   	Player() {		// 추상클래스도 생성자가 있어야 한다.
   		pause = false;
   		currentPos = 0;
   	}
----- 지정한 위치(pos)에서 재생을 시작하는 기능 -----
   	abstract void	play(int pos);
------------ 재생을 즉시 멈추는 기능 -------------
   	abstract void	stop();

   	void	play() {
   		play(currentPos);	// 추상메서드를 사용할 수 있다.
   	}
}

추상 클래스의 작성

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() {}
}
--------- 추상 클래스 작성 ---------
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() {}
}
------------- main -------------
Unit[] gruop = new Unit[3];
group[0] = new Marin();
group[1] = new Tank();
group[2] = new Dropship();

for(int i=0;i < group.length;i++)
	group[i].move(100, 200);

추상화의 장점

추상화된 코드는 구체화된 코드보다 유연하다.

  • 변경에 유리
post-custom-banner

0개의 댓글