Metaverse/Unity

C# / 싱글톤 디자인 패턴

onenewkong 2023. 5. 6. 16:47

해당 객체의 메모리를 정적으로 할당하여 하나의 객체에만 접근하는 방법

 

  • 프로그램이 동작하는 동안 최초로 생성된 객체 하나에만 접근하게 되므로 데이터를 접근하고 수정하는데 아주 용이한 특징이 있음
  • 생성자를 다른 곳에서 새롭게 선언하더라도 이미 정적으로 선언된 객체가 반환되므로 중복 생성을 방지
  • 초기 객체를 생성하게 되면 정적 메모리에 올라가므로 이후 호출하는데 빠르게 접근 가능
  • 정적 메모리에 할당된 객체로 해당 객체에 너무 큰 메모리가 쌓이게 되면 프로그램 성능이 현저하게 낮아질 수 있음 (정적 메모리에 할당할 수 있는 메모리 크기가 제한적)
  • 프로그램이 복잡해지면서 서로 다른 데이터를 공유하게 되는데 이때 다른 객체들과 결합도가 낮아지게 됨
  • 하나의 정적 메모리를 사용하므로 병렬 처리나 동기화와 같이 여러 방법으로 메모리에 접근하는데 문제가 생김

 

 

GameObject smObject = GameObject.Find("ScoreManager");
ScoreManager sm = smObject.GetComponent<ScoreManager>();

sm.SetScore(sm.GetScore() + 1);

 

이런 코드가 싱글톤 패턴을 사용하면, 

 

 

ScoreManager.Instance.SetScore(ScoreManager.Instance.GetScore() + 1);

 

한 줄로 간단해짐

 

 

하지만, 코드의 가독성이 떨어지므로..

 

 

Get/Set Property

캡슐화

접근은 변수처럼 편리하고 효율적인 방식

 

 

public int Score
{
	get 
    { 
            return currentScore;
	}
	set
	{
		currentScore = value;
		currentScoreUI.text = "현재 점수 : " + currentScore;

		if(currentScore > bestScore)
		{
			bestScore = currentScore;
			bestScoreUI.text = "최고 점수 : " + bestScore;
			PlayerPrefs.SetInt("Best Score", bestScore);
		}
	}
 }

 

 

그러면 이렇게 바뀌게 됨

 

ScoreManager.Instance.Score++;

 

 

 

 

 

 

 

 

 

 출처: 인생 유니티 교과서 3.3 - 1 싱글톤 디자인 패턴으로 관리자 만들기

'Metaverse > Unity' 카테고리의 다른 글

체감형 AR 디자인 - 최적화  (0) 2023.05.17
Object Pool  (0) 2023.05.06
Raycast  (0) 2023.04.05
deltaTime & fixedDeltaTime  (0) 2023.04.05
OnCollision & OnTrigger  (0) 2023.04.05