카테고리 없음

서로 다른 클래스에서 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();
    }