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