본문 바로가기
Unity

싱글톤

by imagineer_jinny 2021. 7. 13.

디자인패턴: 프로그래머들 사이에서 공유되는 어떤 코드를 작성하는 방향.

싱글톤: 게임이나 메모리상에 단 하나만 존재, 언제 어디서든 접근 가능한 오브젝트를 만들 때 사용되는 디자인 패턴

 

예시: Ninja Obj들 중에서 NinjaKing을 찾고 싶을 때 static 변수에 NinjaKing을 만들고 그 안에 Naruto를 넣으면 

NinjaKing이 누군지 하나씩 살펴볼 필요 없이 Sakura, Sasuke가 static NinjaKing 변수에 누가 들어있는지 보면 됨

 

 

싱글톤은 OO Manager 처럼 단 하나만 존재하고 모든 친구들이 손쉽게 쓸 수 있을 필요가 있는 오브젝트를 만들 때 씀.

예를 들어 몬스터는 여러개 있을 수 있지만 몬스터를 관리해주는 친구는 하나만 있으면 됨.

그러면 그 몬스터 매니저는 싱글톤을 사용함.

 

 

싱글톤 언제 사용하나?

ScoreManager를 만든다고 가정해보자.

여러 게임 오브젝트들의 점수를 관리하는 매니저인데 게임 오브젝트가 많을때 일일이 다 드래그 앤 드롭해서 

ScoreManager를 적용시키기 번거로움. 이럴 때 싱글톤 패턴을 사용함.

 

싱글톤 어떻게 사용하나?

단 하나의 static 변수에 자기 자신을 집어넣음.

 

Awake는 Start보다 한박자 빠름.

 

이 다음 부터 ScoreAdder와 ScoreSubtractor은 scoreManager에 접근하기 위해서

scoreManager를 일일이 드래그 앤 드롭으로 가져올 필요 없고

이런식으로 ScoreManager에 .을 찍어 instance 안에 있는 scoreManager를 불러온다.

 

정리

싱글톤은 단 하나만 존재하는 유일한 변수에 자기 자신을 집어넣음으로써 다른 친구들이 자기 자신을 사용할 때

복잡하게 드래그 앤 드롭이나 검색을 통해서 찾아가는 방법이 아니라 바로 들어가서 바로 쓰게 해줌.

 

싱글톤은 유일하게 단 하나만 존재하고 모든 친구들이 접근 가능해야 할 때 사용하는 디자인 패턴 

 

 

주의할 점

싱글톤은 ScoreManager가 씬 상에 무조건 하나 존재한다는 확정이 있어야 함.

즉 instance에 아직 오브젝트가 할당되어있지 않다면 오브젝트를 찾아줘야하고 

오브젝트가 두 개 이상 존재하면 두 개 중에 하나는 파괴하는 safety code를 넣을 수도 있음.

 

코드 수정 

GetInstance라는 static 함수 통해서 instance라는 변수를 가져오게 수정. 

왜? 

instance가 비어있는 경우가 있을 수도 있으니 씬 상에 있는 모든 게임 오브젝트들을 뒤져서 ScooreManager를 하나 찾은 다음에 그 ScoreManager를 instance에 넣는 방식.

 

 

만약 게임 세상에 ScoreManager가 없다면 에러가 남.

이를 방지하기 위해 if문 추가.

빈 게임 오브젝트 하나를 ScoreManager라는 이름 하나로 만들고

container 친구에게 <ScoreManager>를 하나 만들어서 붙임.

그리고 AddComponent는 방금 붙인 컴포넌트를 return으로 넘겨줄 수 있음.

return할 친구를 instance에 넣어준다!

 

이렇게 하면 마우스 클릭 한 순간에 ScoreManager가 하나 생김.

이런 것을 지연 생성이라고 함.

싱글톤의 특징 중 하나가 사용하려고 할 때 새로 만드는 것!

싱글톤은 코드를 통해 미리 게임오브젝트를 만들지 않고 코드를 통해 실시간으로 생성되도록 하기 때문에 간편함.

 

만약 ScoreManager가 두개라면?

두개 중 하나 파괴하는 코드 만들기

'Unity' 카테고리의 다른 글

코루틴  (0) 2021.07.13
UI / 오디오 / 최종빌드  (0) 2021.07.13
인스턴스화  (0) 2021.07.12
회전과 쿼터니언  (0) 2021.07.12
평행이동과 좌표계 + 부모 자식 관계  (0) 2021.07.12

댓글