집게사장의 꿈

[디자인 패턴] Singleton 본문

기타

[디자인 패턴] Singleton

Krapboss 2024. 5. 19. 02:27

[!! 출처 !!]https://www.youtube.com/live/iyeRmq24HVk?si=v1Sqb4xk_Q-uIdOT

 

 

클래스가 자신의 인스턴스 하나만 인스턴스화할 수 있도록 보장
단일 인스턴스 손쉬운 전역 액세스
[주로 매니저 객체에 적용]

안티패턴으로 취급되기도함[매우 공감]
커플링 발생이 쉽고, 디버깅 및 테스트 불편

 

자기 자신의 인스턴스를 static으로 가지고 있음.

쓰레드에서 호출이 되는게 아니라면, 클래스 자체에서 생성 후 반환하면 된다.

 

Mono에서 구동되는 기본적인 싱글톤 구현

 

 

 Generic 을 활용한 싱글톤 생성방

오른쪽 상단 내용 GameManager에서 Singleton을 상속받아 전역으로 사용하는 방법

 

 


Mono 없이 싱글톤 사용법

Mono 환경이 아니라면 멀티쓰레드 환경에서 문제가 발생할 수 있음.

 

이때 Lock을 활용하면 해당 구문 안에서 단일 쓰레드 작업을 보장한다.

 

두번 NULL 체크를 하는 이유는 멀티 쓰레드 환경에서 new 키워드로 생성 중 instance에 접근하게 되면, 

IF Instance == null : 이 부합하게 되면서 MissMatch 문제가 발생가능

Volatile를 선언하면, 캐시 최적은 제외되지만 멀티쓰레드 환경에서 안정성을 지켜준다.

 

시작부터 생

처음부터 생성하는 것이 어쩌면 더 안전하다.