โถ ํ ํ๋ฆฟ ๋ฉ์๋ ์์ฉํ๊ธฐ
โ
โ
์์ ์๋๋ฆฌ์ค) Player๊ฐ ์๊ณ ์ด Player๊ฐ ๊ฒ์์ ํ๋ค. ๊ฒ์์์ Player๊ฐ ๊ฐ์ง๋ ๋ ๋ฒจ์ ๋ฐ๋ผ ํ ์ ์๋ ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ด ์๋ค. run( ), jump( ), turn( ) ์ด๋ค.
์ด๋ณด์ ๋ ๋ฒจ : ์ฒ์ฒํ ๋ฌ๋ฆด(run) ์ ์์ต๋๋ค. ์ค๊ธ์ ๋ ๋ฒจ : ๋น ๋ฅด๊ฒ ๋ฌ๋ฆฌ๊ณ (run) ์ ํํ (jump) ์ ์์ต๋๋ค. ๊ณ ๊ธ์ ๋ ๋ฒจ : ์์ฒญ ๋น ๋ฅด๊ฒ ๋ฌ๋ฆฌ๊ณ (run) ์ ํํ๊ณ (jump) ํดํ (turn) ์ ์์ต๋๋ค. |
๋ชจ๋ ๋ ๋ฒจ์์ Player๊ฐ ์ฌ์ฉํ ์ ์๋ ํ์ด๊ธฐ์ธ go(int count) ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. go( ) ๋ฉ์๋๋ ํ ๋ฒ runํ๊ณ , ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ count๋งํผ jumpํ๊ณ , ํ ๋ฒ turnํฉ๋๋ค. ๊ทธ ๋ ๋ฒจ์์ ๋ถ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ์์ฒญํ๋ฉด ํ ์ ์๋ค๋ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
โ
โ ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊ฒ์ธ์ง๋ฅผ ์ฒ์ฒํ ์๊ฐํด ๋ณด๊ณ ์์ผ๋ก ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ๊ฐ๋ตํ๊ฒ ๊ทธ๋ ค๋ณด๋ ๊ฒ์ด ๊ฐ์ฒด์งํฅ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ข์ ์ต๊ด์ด๋ค.
<๊ณผ์ >
package gamelevel;
public class Player {
private PlayerLevel level; // Player๊ฐ ๊ฐ์ง๋ level ๋ณ์ ์ ์ธ
public Player() { // ๋ํดํธ ์์ฑ์. ์ฒ์ ์์ฑ๋๋ฉด BeginnerLevel๋ก ์์ํ๋ฉฐ ๋ ๋ฒจ ๋ฉ์ธ์ง ์ถ๋ ฅ
level = new BeginnerLevel();
level.showLevelMessage();
}
public PlayerLevel getLevel() {
return level;
}
public void upgradeLevel(PlayerLevel level) { // ๋ ๋ฒจ ๋ณ๊ฒฝ ๋ฉ์๋. ํ์ฌ ์์ ์ level์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ level๋ก ๋ณ๊ฒฝํ๊ณ ๋ ๋ฒจ ๋ฉ์ธ์ง ์ถ๋ ฅ
this.level = level;
level.showLevelMessage();
}
public void play(int count) {
level.go(count); // PlayerLevel์ ํ
ํ๋ฆฟ ๋ฉ์๋ go() ํธ์ถ
}
}
package 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) { // ์ฌ์ ์๋๋ฉด ์๋๋ฏ๋ก final๋ก ์ ์ธ
run();
for (int i = 0; i < count; i++) {
jump();
}
turn();
}
}
package 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 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 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("ํ ๋ฐํด ๋๋๋ค.");
}
@Override
public void showLevelMessage() {
System.out.println("***** ๊ณ ๊ธ์ ๋ ๋ฒจ ์
๋๋ค. *****");
}
}
package gamelevel;
public class MainBoard {
public static void main(String[] args) {
Player player = new Player(); // ์ฒ์ ์์ฑํ๋ฉด BiginnerLevel
player.play(1);
AdvancedLevel aLevel = new AdvancedLevel();
player.upgradeLevel(aLevel);
player.play(2);
SuperLevel sLevel = new SuperLevel();
player.upgradeLevel(sLevel);
player.play(3);
}
}
-์ถ๋ ฅ ํด๋์ค์์ ์ player.go(int count); ๋ก ์ถ๋ ฅ์ด ์๋๊ณ player.play(int count); ๋ก ์ถ๋ ฅ๋๋์ง ๋ชจ๋ฅด๊ฒ ๋ค..
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Car ์ถ์ํด๋์ค + ์์ฉ (0) | 2021.02.20 |
---|---|
[Java] final ์์ฝ์ด (0) | 2021.02.20 |
[Java] ํ ํ๋ฆฟ ๋ฉ์๋ (0) | 2021.02.20 |
[Java] ์ถ์ ํด๋์ค (0) | 2021.02.20 |
[Java] ์ค์ต (0) | 2021.02.20 |
๋๊ธ