νμ κ»μ λ½λ λ½κΈ° κΈ°κΈ°λ₯Ό λ§λ λ€κ³ κ°μ
κΈ°κΈ°μ μνλ, λμ μ΄ λ€μ΄κ° μν / μλ¬΄λ° λμ μ΄ ν¬μ
λμ§ μμ μν / νμ κ»μ΄ λ§€μ§λ μν / νμ κ»μ΄ λμ€κ³ μλ μν λ‘ κ΅¬λΆ
μνκ°λ€μ λͺ¨λ μμλ‘ λκ³ , νμ¬ μνλ₯Ό λνλ΄λ λ³μ νλλ₯Ό λ
class GumBallMachine {
static int SOLD_OUT = 0;
static int NO_COIN = 1;
...
int state = SOLD_OUT;
...
}
λ, μ΄ μμ€ν μμ μμ μ μλ λͺ¨λ νλμ μ μ
μμ νλμ νλ©΄ μνκ° λ³κ²½λ¨
void insertCoin() {
if (state == SOLD_OUT) {
System.out.println("λ§€μ§λμμΌλ λ€μκΈ°νμ μ΄μ©ν΄μ£ΌμΈμ");
} else if (state == NO_COIN) {
state = HAS_COIN;
System.out.println("λμ μ΄ ν¬μ
λμμ΅λλ€");
}
...
}
μμ‘μ΄λ₯Ό λ리λ κ², νμ κ» λ΄λ³΄λ λ±μ ꡬν...
μμ κ°μ΄ μ½λλ₯Ό μ§°μ λ, 10λ²μ€μ νλ²μ νμ κ»μ λκ°λ₯Ό μ£Όλ κΈ°λ₯μ μΆκ° νλ€κ³ κ°μ
λκ°λ₯Ό μ€λ€λ μν κ°μ μΆκ°νκ³ , κ° μν λ³κ²½ ν¨μλ€μ λͺ¨λ λ³κ²½ ν΄μ£Όμ΄μΌ ν¨
λ°λΌμ State patternμ μ μ©νμ¬, κ° μνλ₯Ό λΆλ¦¬
interface State {
void insertCoin();
void ejectCoin();
...
}
class GumBallMachine {
State soldOutState;
State noCoinState;
...
State state = soldOutState;
...
public GumBallMachine() {
this.soldOutState = new SoldOutState(this);
this.noCoinState = new NoCoinState(this);
...
}
void insertCoin() {
state.insertCoin();
}
void ejectCoin() {
state.ejectCoin();
}
void setState(State state) {
this.state = state;
}
...
}
class SoldState implements State {
GumballMachine gumballMachine;
public SoldState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
@override void insertCoin() {
gumballMachine.setState(gumballMachine,getHasCoinState());
// ...
}
// ...
}
<aside> π‘ Context κ°μ²΄ ( Stateλ₯Ό λ³κ²½νλ κ³³ )μ λ΄λΆ μν ( State )κ° λ°λμ λ°λΌ, Context κ°μ²΄μ νλμ λ°κΏ μ μλλ‘ κ΅¬ννλ κ²
</aside>