카테고리 없음
서로 다른 클래스에서 callback 함수 전달하기
sakuraop
2022. 12. 12. 01:51
목표
1. MainProgram class에서 Controller class의 메서드(유저입력받기)를 실행합니다.
2. (유저입력받기) 메서드를 실행하고 난 뒤 MainProgram에서 다른 메서드를 연달아 실행합니다.
(상태1)
Main Program은 model과 controller를 생성했습니다.
class MainProgram {
#model;
#controller;
constructor(model, controller) {
this.#model = model;
this.#controller = controller;
}
...
(상태2)
buildStructure 메서드를 실행하고 나서 match() 메서드를 실행하여 model의 데이터를 받을 수 있어야합니다.
buildStructure() {
this.#controller.printStart();
this.#controller.setComputerNumber();
this.#controller.inputUserNumber(() => this.match());
}
match() {
const userNumber = this.#model.getUserNumber();
}
1. controller에서 유저의 입력을 받는 inputUserNumber 메서드는 콜백 함수를 인자로 받도록 합니다. callback에 this.match()가 전달됩니다. inputUserNumber(callback) {
this.#inputView.readPitch((userInput) => {
this.setUserNumber(userInput, callback);
});
}
2. 유저의 입력을 model에 set 하기 위한 메서드(this.setUserNumber)를 실행할 때 callback을 전달합니다. inputUserNumber(callback) {
this.#inputView.readPitch((userInput) => {
this.setUserNumber(userInput, callback);
});
}
3. readLine에서 callback을 전달하도록 합니다. readPitch(callback) {
Console.readLine(MESSAGE.INPUT, callback);
}
4. userInput을 model에 set 하도록 합니다. setUserNumber(userInput, callback) {
const validUserNumber = validateNumber(userInput);
this.#baseballModel.setUserNumber(validUserNumber);
callback();
}
5. 그리고 callback() 이 실행되면서 this.match()가 불러와집니다. setUserNumber(userInput, callback) {
const validUserNumber = validateNumber(userInput);
this.#baseballModel.setUserNumber(validUserNumber);
callback();
}
6. model에 set으로 저장한 데이터를 get으로 불러올 수 있게 됩니다. match() {
const userNumber = this.#model.getUserNumber();
}
|