디자인 패턴 중 하나
정의 : 객체의 인스턴스가 오직 1개만 생성 되는 패턴
예를 들어 DB 인스턴스나 Logger과 같은 인스턴스 가 해당
하나의 인스턴스만 갖도록 하는 동시에 인스턴스에 대한 전역 접근 지점을 제공한다
구현 방법1
var lock = &sync.Mutex{}
type single struc{
}
var singleInstance *single
func GetInstance() *single{
if singleInstance == nil {
lock.Lock()
defer lock.Unlock()
if singleInstance == nil {
fmt.Println("[Mutex] create single instance")
singleInstance = &single{}
} else {
fmt.Println("[Mutex] single instance already created-1")
}
} else {
fmt.Println("[Mutex] single instance already created-2")
}
return singleInstance
}
구현 방법 2
sync.Once 사용
var once sync.Once
type single struct{
}
var singleInstance *single
func GetInstance() *single {
if singleInstance == nil {
once.Do(func() {
fmt.Println("[Once] create single instance")
singleInstance = &single{}
})
} else {
fmt.Println("[Once] single instance already created-1")
}
return singleInstance
}