JavaScript 기본

함수 리스트 (Delegate)

밀하우스 마나스톰 2022. 4. 12. 19:10

유니티에서 옵저버패턴과 delegate를 사용했었던 경험이 몇 번 있었는데,

 

타입스크립트와 코코스 크리에이터를 사용하는 프로젝트에서도 비슷하게 사용하고 싶은 상황이 생겼다.

 

export class Manager {
    static delegate1: { [key: string]: any } = {}; // functions 컬렉션
    static delegate2: Array<any> = [];       // functions 배열
}

delegate는 이런 식으로 Dictionary 형태 또는 List 형태로 생성할 수 있다.

 

아무래도 타입스크립트는 함수와 변수를 다루는 데 있어서 차이가 없다시피 하고

 

any 타입으로 함수를 지칭할 수 있기 때문에 사용하기 더 간편하다.

 

 

start() {
    Manager.delegate1['jump'] = this.Jump.bind(this);   // 함수 추가
    Manager.delegate2.push(this.Jump.bind(this));       // 함수 추가
    
    Manager.delegate1['jump']?.();                      // 함수 실행
    Manager.delegate2[0]?.();                           // 함수 실행
}

Jump() {
    console.log("Jump");
}

각각의 함수 집합에 새로운 함수를 추가하거나, 들어있는 함수를 실행하는 방법은 위와 같다.

 

주의할 점은, 함수를 추가할 때 함수 실행 객체(this)에 대한 바인딩을 해줘야 한다.