디자인패턴: 프로그래머들 사이에서 공유되는 어떤 코드를 작성하는 방향.
싱글톤: 게임이나 메모리상에 단 하나만 존재, 언제 어디서든 접근 가능한 오브젝트를 만들 때 사용되는 디자인 패턴
예시: 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 |
댓글