컴퓨터공학 💻 도서관📚

Part2. 3-16 객체 코딩으로 복습하기 1 본문

✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습

Part2. 3-16 객체 코딩으로 복습하기 1

들판속초록풀 2025. 6. 16. 17:14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

추상 클래스와 템플릿 메서드

package ch16.gamelevel;

public abstract class PlayerLevel {     // 추상 클래스로 선언 (상속을 위한 클래스)
	
	public abstract void run();         // 하위 클래스에서 정의할 메서드는 선언만 하기
	public abstract void jump();
	public abstract void turn();
	public abstract void showLevelMessage();
	
	
	final public void go(int count) {     // 템플릿 메서드
		run();                            // final 예약어 사용으로 하위클래스에서 재정의 못 함
		for(int i = 0; i<count; i++) {    // 굉장히 강력크한 마법
			jump();
		}
		turn();
	}
}
package ch16.gamelevel;

public class Player {
	
	private PlayerLevel level;      // PlayerLevel 클래스를 참조 자료형으로 사용
	
	public Player(){
		level = new BeginnerLevel();    // 형변환
		level.showLevelMessage();       // 여기에서 초보자입니다 출력
	}
	
	
	public PlayerLevel getLevel() {     // return형이  PlayerLevel
		return level;                   // return 하긷
	}
	
	public void upgradeLevel( PlayerLevel level ) {
		this.level = level;
		level.showLevelMessage();       // 여기서 중급자, 고급자입니다 출력
	}
	
	public void play(int count) {       // play 메서드에서  go메서드 호출
		level.go(count);
	}
}
package ch16.gamelevel;

public class BeginnerLevel extends PlayerLevel{

	@Override
	public void run() {
		System.out.println("천천히 달립니다.");
	}

	@Override
	public void jump() {
		System.out.println("jump 못하지롱");
	}

	@Override
	public void turn() {
		System.out.println("turn 못하지롱");
	}

	@Override
	public void showLevelMessage() {
		System.out.println("****** 초급자 레벨입니다. ******");
	}
}
package ch16.gamelevel;

public class AdvancedLevel extends PlayerLevel{

	@Override
	public void run() {
		System.out.println("빨리 달립니다.");
	}

	@Override
	public void jump() {
		System.out.println("높이 jump 합니다.");
	}

	@Override
	public void turn() {
		System.out.println("turn 못하지롱");
	}

	@Override
	public void showLevelMessage() {
		System.out.println("****** 중급자 레벨입니다. ******");
	}
}
package ch16.gamelevel;

public class SuperLevel extends PlayerLevel{

	@Override
	public void run() {
		System.out.println("엄청 빠르게 달립니다.");
	}

	@Override
	public void jump() {
		System.out.println("아주 높이jump 합니다.");
	}

	@Override
	public void turn() {
		System.out.println("turn 합니다.");
	}

	@Override
	public void showLevelMessage() {
		System.out.println("****** 고급자 레벨입니다. ******");
	}
}
package ch16.gamelevel;

public class MainBoardPlay {

	public static void main(String[] args) {

		Player player = new Player();
		player.play(1);
		
		AdvancedLevel aLevel = new AdvancedLevel();
		player.upgradeLevel(aLevel);
		player.play(2);
		
		SuperLevel sLevel = new SuperLevel();
		player.upgradeLevel(sLevel);
		player.play(3);
	}
}
Comments