유니티에서 옵저버패턴과 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)에 대한 바인딩을 해줘야 한다.
'JavaScript 기본' 카테고리의 다른 글
순환 참조 (0) | 2022.10.25 |
---|---|
Call By Sharing (0) | 2022.04.22 |
Array 함수 #6. 기타 (0) | 2022.03.08 |
Array 함수 #5. sort (0) | 2022.03.03 |
Array 함수 #4. reduce vs.forEach (0) | 2022.03.02 |