싱글톤은 특정 클래스에 대해서 객체 인스터스가 하나만 만들어 질 수 있도록 해주는 패턴이다. 이 패턴을 사용하면 전역 변수를 사용할 때와 맟나가지로 객체 인스턴스를 어디서든지 액세스 할 수 있다.
package singleton
type singleton struct {
count int
}
var instance *singleton
func GetInstance() *singleton {
if instance == nil {
instance = new(singleton)
}
return instance
} //인스턴스를 만들거나 있으면 해당 인스턴스를 리턴
func (s *singleton) AddOne() int {
s.count++
return s.count
}
미리 인스턴스를 생성하지 않고, 존재하지 않았을때서야 인스턴스를 생성하는 방식을 게으른 인스턴스 생성이라고 부른다. 싱글톤은 커넥션 풀 또는 쓰레드 풀등 여러곳에서 자주 쓰인다.
싱글톤 패턴을 만드는 방법은 아래 사항이 포함되면 된다.
var once sync.Once
var instance *singleton
func GetInstance() *singleton {
if instance == nil {
once.Do(func() {
instance = new(singleton)
})
}
return instance
}