목차

반응형

보통 유니티 프로젝트라 하면 싱글톤으로 시작해서 싱글톤으로 끝난다.

제페토의 타입스크립트로 싱글톤을 어떻게 구현해야 하나 찾아봤다.

갖다 쓸 사람 갖다 쓰세요.

 

ObstacleManager라는 매니저를 만든다고 가정하면 아래와 같은 코드가 나온다.

export default class ObstacleManager extends ZepetoScriptBehaviour {

    private static instance: ObstacleManager;
    static getInstance() {
        return this.instance || (this.instance = new this());
    }

    Start() {
        ObstacleManager.instance = this;

    }
}

Start() 안의 부분은 내가 지어낸 건데 보통 대부분의 언어는 싱글톤을 만들면 초기 인스턴스를 설정해주는 부분이 없으나 유니티는 저 부분이 매우 필요하다.

 

(먼가 글하나 날로 먹는 것 같아서 살짝 TMI를 넣어본다.)

이 말이 이해가 안 가는 사람은 아직 유니티에서 싱글톤의 초기 인스턴스가 필요한 형태의 특수성을 이해할 정도로 더 많이 쓰지 않았다는 것이다. 쉽게 말하자면 유니티 프로젝트 안에 싱글톤 매니저 만들고 인스펙터에서 초기값 이것저것 설정해놓는 부분이 있는데 그거 자체가 이미 싱글톤 인스턴스가 생성된 것이라고 보면 된다. 그래서 저 코드가 없으면 당신이 설정해놓은 싱글톤 인스턴스가 스태틱 인스턴스에 안 들어가서 설정해놓은 초기값을 못쓰고 스태틱 그냥 새로운 인스턴스를 만들어버린다.

 

더 깔끔한 방법이 없나 아쉽긴 한데... 저 정도만으로 해도 크게 문제 될 건 없을 것 같다.

ObstacleManager.getInstance().SpawnCar() 이런 식으로 호출해서 사용하면 된다.

반응형