[JAVA λμμΈ ν¨ν΄] ν νλ¦Ώ λ©μλ ν¨ν΄
- νλ μμν¬μμ ννκ² μ¬μ©λλ μ€κ³ κΈ°λ² μ€ νλ
- abstract, final ν€μλλ₯Ό μ¬μ©ν΄μ ꡬν
- final λ©μλμ abstract λ©μλλ‘ λ‘μ§μ νλ¦λ§μ μ μνκ³ κ΅¬μ²΄μ μΈ κ΅¬νμ νμ ν΄λμ€μ μμ
ν νλ¦Ώ λ©μλ ν¨ν΄μ νλ μμν¬μμ ννκ² μ¬μ©λλ μ€κ³ κΈ°λ² μ€ νλμ λλ€.
μ°μ ν νλ¦Ώ λ©μλλ νλ‘κ·Έλ¨ μ 체μ νλ¦(μλ리μ€)λ₯Ό μ μν λ©μλμ λλ€. final ν€μλλ₯Ό μ¬μ©ν΄μ overrideν μ μκ² νλ κ²μ΄ νΉμ§μ λλ€.
μ΄λ¬ν ν νλ¦Ώ λ©μλλ₯Ό μ΄μ©ν ν νλ¦Ώ λ©μλ ν¨ν΄μ abstract ν΄λμ€μμ abstract λ©μλλ₯Ό μ΄μ©ν΄μ μ 체 νλ¦μ μ μνκ³ κ΅¬μ²΄μ μΈ κ° λ©μλμ ꡬνμ νμ ν΄λμ€μ μμνλ κ²μ λλ€.
νμν΄λμ€ λ§λ€ μΈλΆ ꡬν λ΄μ©μ΄ λ¬λΌμ Έλ λ‘μ§μ νλ¦μ ν νλ¦Ώ λ©μλμ μ μλ νλ¦λλ‘ μνλ©λλ€.
ν νλ¦Ώ λ©μλ ν¨ν΄ μμ 1
κ°μ₯ κ°λ¨ν μλ‘ λ€μκ³Ό κ°μ μλ₯Ό λ€ μ μμ΅λλ€.
public abstract class Car {
protected abstract void startCar(); // μλ κ±ΈκΈ°
protected abstract void drive(); // μ΄ν
protected abstract void stop(); // λ©μΆ€
protected abstract void turnOff(); // μλ λκΈ°
// ν
νλ¦Ώ λ©μλ
public final void run() {
startCar();
drive();
stop();
turnOff();
}
}
abstract ν΄λμ€ Carλ finalλ‘ μ μΈλ run() λ©μλλ₯Ό μ΄μ©ν΄μ startCar() - drive() - stop() - turnOff()μ νλ¦μ μ μν©λλ€.
μ΄ run() λ©μλκ° ν νλ¦Ώ λ©μλμ λλ€.
abstract λ©μλμΈ startCar(), drive(), stop(), turnOff()λ Carλ₯Ό μμλ°λ νμ ν΄λμ€μμ ꡬννλ©°, μΈλΆ ꡬν λ΄μ©μ΄ λ¬λΌλ run()μμ μ μν νλ¦μ λμΌνκ² κ°μ Έκ°λλ€.
ν νλ¦Ώ λ©μλ ν¨ν΄ μμ 2
- κ²μμμ Playerκ° κ°μ§λ λ 벨μ λ°λΌ walk(), run(), jump() μΈ κ°μ§ κΈ°λ₯μ ν μ μλ€.
- Beginner λ 벨: μ²μ²ν κ±·λ walk()λ§ κ°λ₯, run(), jump() λΆκ°
- Intermediate λ 벨: λ³΄ν΅ μλλ‘ κ±·λ walk(), μ²μ²ν λ¬λ¦¬λ run() κ°λ₯, jump() λΆκ°
- advanced λ 벨: 빨리 κ±·λ walk(), λ³΄ν΅ μλλ‘ λ¬λ¦¬λ run(), λ³΄ν΅ λμ΄λ‘ μ ννλ jum() κ°λ₯
- Playerμ play()λ₯Ό ν΅ν΄ μ μΈ κ°μ§ κΈ°λ₯μ μννκ³ νμλ₯Ό 맀κ°λ³μλ‘ λ°μ νμ λ§νΌ jump() νλ€.
public class Player {
private PlayerLevel level;
public Player() {
level = new BeginnerPlayerLevel();
System.out.println("νλ μ΄μ΄κ° μμ±λμμ΅λλ€.");
level.showLevelInfo();
}
public void play(int count) {
level.go(count);
}
public void levelUp(PlayerLevel level) {
this.level = level;
System.out.println("Level Up!!");
this.level.showLevelInfo();
}
}
public abstract class PlayerLevel {
protected abstract void walk();
protected abstract void run();
protected abstract void jump();
protected abstract void showLevelInfo();
public final void go(int count) {// ν
νλ¦Ώ λ©μλ
walk();
run();
for (int i=0; i<count; i++) {
jump();
}
}
}
public class BeginnerPlayerLevel extends PlayerLevel {
@Override
protected void walk() {
System.out.println("μ²μ²ν κ±·μ΅λλ€.");
}
@Override
protected void run() {
System.out.println("BeginnerPlayerλ λ¬λ¦΄ μ μμ΅λλ€.");
}
@Override
protected void jump() {
System.out.println("BeginnerPlayerλ μ νν μ μμ΅λλ€.");
}
@Override
protected void showLevelInfo() {
System.out.println("===== Beginner λ 벨μ
λλ€. =====");
}
}
public class IntermediatePlayerLevel extends PlayerLevel {
@Override
protected void walk() {
System.out.println("λ³΄ν΅ μλλ‘ κ±·μ΅λλ€.");
}
@Override
protected void run() {
System.out.println("μ²μ²ν λ¬λ¦½λλ€.");
}
@Override
protected void jump() {
System.out.println("IntermediatePlayerλ μ νν μ μμ΅λλ€.");
}
@Override
protected void showLevelInfo() {
System.out.println("===== Intermediate λ 벨μ
λλ€. =====");
}
}
public class AdvancedPlayerLevel extends PlayerLevel {
@Override
protected void walk() {
System.out.println("λΉ λ₯΄κ² κ±·μ΅λλ€.");
}
@Override
protected void run() {
System.out.println("λ³΄ν΅ μλλ‘ λ¬λ¦½λλ€.");
}
@Override
protected void jump() {
System.out.println("λ³΄ν΅ λμ΄λ‘ μ νν©λλ€.");
}
@Override
protected void showLevelInfo() {
System.out.println("===== Advanced λ 벨μ
λλ€. =====");
}
}
public class PlayerLevelTest {
public static void main(String[] args) {
Player player = new Player();
player.play(1);
player.levelUp(new IntermediatePlayerLevel());
player.play(2);
player.levelUp(new AdvancedPlayerLevel());
player.play(3);
}
}
π₯ μ€ν κ²°κ³Ό
νλ μ΄μ΄κ° μμ±λμμ΅λλ€.
===== Beginner λ 벨μ
λλ€. =====
μ²μ²ν κ±·μ΅λλ€.
BeginnerPlayerλ λ¬λ¦΄ μ μμ΅λλ€.
BeginnerPlayerλ μ νν μ μμ΅λλ€.
Level Up!!
===== Intermediate λ 벨μ
λλ€. =====
λ³΄ν΅ μλλ‘ κ±·μ΅λλ€.
μ²μ²ν λ¬λ¦½λλ€.
IntermediatePlayerλ μ νν μ μμ΅λλ€.
IntermediatePlayerλ μ νν μ μμ΅λλ€.
Level Up!!
===== Advanced λ 벨μ
λλ€. =====
λΉ λ₯΄κ² κ±·μ΅λλ€.
λ³΄ν΅ μλλ‘ λ¬λ¦½λλ€.
λ³΄ν΅ λμ΄λ‘ μ νν©λλ€.
λ³΄ν΅ λμ΄λ‘ μ νν©λλ€.
λ³΄ν΅ λμ΄λ‘ μ νν©λλ€.
Process finished with exit code 0
μ°Έκ³ λ‘ μλ°μ final ν€μλλ λ³μ, λ©μλ, ν΄λμ€μ λΆμΌ μ μμΌλ©° λ³μμ λΆμ΄λ©΄ μ΅μ΄ ν λΉ μ΄ν κ°μ λ³κ²½ν μ μλ μμλ‘ μ¬μ©λ©λλ€. λ©μλμ λΆμ΄λ©΄ νμ ν΄λμ€μμ overrideν μ μκ² ν©λλ€. ν΄λμ€μ λΆμ΄λ©΄ μμλ μ μλ ν΄λμ€κ° λ©λλ€. μλ° API μ€ String ν΄λμ€λ final ν΄λμ€μ΄κΈ° λλ¬Έμ μμλ°μ μ¬μ©ν μ μμ΅λλ€.
'JavaΒ·ο»ΏServletΒ·ο»ΏJSP' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JAVAμ κ°μ²΄ μ§λ ¬ν(Serialization)μ JSON μ§λ ¬ν (0) | 2020.07.10 |
---|---|
μλ° Object ν΄λμ€ μ 리 - toString(), equals(), hashCode(), clone() (0) | 2020.06.30 |
[JAVA λμμΈ ν¨ν΄] staticμ μμ©ν μ±κΈν€ ν¨ν΄(Singleton Pattern) ꡬν (0) | 2020.06.18 |
JAVA μ¬κ· νΈμΆ(Recursive Call) μμ (2) | 2020.04.07 |
SQL μμ‘΄ μ ν리μΌμ΄μ μ λ¬Έμ μ κ³Ό JPA (0) | 2020.03.18 |
λκΈ