Programming skills/Unity

c# 싱글톤(Single ton)

제이커브(Jcurve) 2023. 8. 10. 23:24

싱글톤은 모든 데이터를 전역으로 관리하여 쉽게 접근하는 장점이 있다. 

Manager 스크립트 즉 관리를 하는 감독에서 유용하게 사용 가능한 간단한 방법이다. 

 

//ScoreManager 싱글톤 패턴 구현
public class A : Monobehaviour
{
  //싱글톤 객체
  public static ScoreManager Instance = null;
  
  //싱글톤 객체에 값이 없다면 자기 자신 할당
  void Awake()
  {
     if(Instance == null)
     {
        Instance = this;
     }
   }
  
}

 

다음은 Get / Set 프로퍼티를 사용하는 방법이다. 객체지향 프로그래밍의 속성인 캡슐형이 바로 이 속성에 접근하는 프로퍼티이다. Get과 Set 함수의 기능은 그대로 동작하게 하고 접근은 편리하게 변수처럼 효율적인 방식이다.

선언은 변수, 몸체는 함수이다.

 

public class ScoreManager : MonoBehaviour
    {
        public static ScoreManager Instance = null;

        public int Score
        {
            get
            {
                return currentScore;
            }
            set
            {
                // To do...
                //클래스의 속성에 값을 할당
                currentScore = value;

                //화면에 현재 점수 표현하기
                currentScoreUI.text = "현재 점수" + currentScore;

                
            }
        }
    }

그런 다음 현재 점수를 표현하고 싶은 스크립트에 들어가 표시하면 된다.

   public class Enemy : MonoBehaviour
    {
        //다른 물체와 충돌할때
        private void OnCollisionEnter(Collision collison)
        {
            //에너미 잡을때마다 현재 점수 표시하고싶다
            ScoreManager.Instance.Score++;
            //....
        }
    }

ScroeManager.Instance(); 함수를 이용해 생성된 객체에 접근할 수 있다. 초기 객체 생성시 정적 메모리가 올라가기에 아주 빠르게 접근하는 장점이 있다. 하지만 정적 메모리에 할당할 수 있는 메모리 크기가 제한적이기에 프로그램이 복잡해질수록 결합도가 낮아진다. 동기화에 어려움이 있다.