class GumballMachine {
private state: State;
private count: number;
constructor(count: number) {
this.count = count;
if (count > 0) {
this.state = new NoQuarterState(this);
}
}
insertQuarter() {
this.state.insertQuarter();
}
ejectQuarter() {
this.state.ejectQuarter();
}
turnCrank() {
this.state.turnCrank();
this.state.dispense();
}
releaseBall() {
console.log("알맹이가 나갑니다.");
if (this.count !== 0) {
this.count -= 1;
}
}
getCount() {
return this.count;
}
setState(state: State) {
this.state = state;
}
getNoQuarterState() {
return new NoQuarterState(this);
}
getHasQuarterState() {
return new HasQuarterState(this);
}
getSoldState() {
return new SoldState(this);
}
getSoldOutState() {
return new SoldOutState(this);
}
}
클래스 내에서 this는 자기 자신(인스턴스)를 가리킨다
class GumballMachine {
// ...
getSoldOutState() {
return new SoldOutState(this);
}
}
위 코드에서 getSoldOutState() 메소드의 리턴 값으로 SoldOutState 인스턴스를 생성한 것을 리턴하는데 이때 SoldOutState 생성자에 전달하는 this는 GumballMachine 인스턴스를 의미한다