싱글톤패턴(singleton)

김새우·2022년 9월 20일
0

go

목록 보기
2/13

디자인 패턴 중 하나

정의 : 객체의 인스턴스가 오직 1개만 생성 되는 패턴
예를 들어 DB 인스턴스나 Logger과 같은 인스턴스 가 해당
하나의 인스턴스만 갖도록 하는 동시에 인스턴스에 대한 전역 접근 지점을 제공한다

구현 방법1

  • Mutex 사용
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
}

0개의 댓글