Golang에서 디자인 패턴 'Singleton'을 배웁니다.
다루어진 예제는 자바 기반이기 때문에 파이썬에서 동등한 사례에 도전한 적이 있었습니다.
Qiita 기사 : "Python에서 디자인 패턴 'Singleton' 배우기"
이번에는 Python으로 구현한 "Singleton"의 샘플 앱을 Golang에서 다시 구현해 보았습니다.
■ Singleton(싱글톤)
Singleton 패턴 (싱글 톤 패턴)은 객체 지향 컴퓨터 프로그램의 디자인 패턴 중 하나입니다. GoF (Gang of Four; 4명의 갱들)에 의해 정의되었다. Singleton 패턴이란, 그 클래스의 인스턴스가 1 개 밖에 생성되지 않는 것을 보증하는 디자인 패턴을 말한다. 로케일이나 룩 앤 필 등, 절대적으로 어플리케이션 전체로 통일해야 하는 구조의 구현에 사용된다
(이상 위키피디아(Wikipedia)에서 인용)
■ "Singleton" 샘플 프로그램
■ 샘플 프로그램에 대해 자세히 알아보기
Git 저장소에도 비슷한 코드가 있습니다.
htps : // 기주 b. 이 m / 싹 / s dy _ f_로 쎄 _ 펑 r r _ ぃ th _ go g / t ree / m r / shin g ton
■ 샘플 프로그램에 대해 자세히 알아보기
Git 저장소에도 비슷한 코드가 있습니다.
htps : // 기주 b. 이 m / 싹 / s dy _ f_로 쎄 _ 펑 r r _ ぃ th _ go g / t ree / m r / shin g ton
.
├── step1
│ └── Main.go
└── step2
└── Main.go
인스턴스가 하나밖에 만들 수 없는 클래스를 정의해 보겠습니다.
step1/Main.go
package main
import "fmt"
// Singleton is struct
type Singleton struct {
}
// MyClass is struct
type MyClass struct {
Singleton
input int
}
var instance *MyClass
func getInstance(input int) *MyClass {
if instance == nil {
instance = &MyClass{input: input}
} else {
instance.input = input
}
return instance
}
func main() {
one := getInstance(1)
fmt.Printf("one.input=%d\n", one.input)
two := getInstance(2)
fmt.Printf("one.input=%d, twe.input=%d\n", one.input, two.input)
one.input = 0
fmt.Printf("one.input=%d, twe.input=%d\n", one.input, two.input)
}
움직여 보자
$ go run step1/Main.go
one.input=1
one.input=2, twe.input=2
one.input=0, twe.input=0
글쎄, 마치 전역 변수처럼 행동합니다.
그리고, 이쪽의 Web 기사 "Go 언어의 Singleton Pattern" 를 참고로, 조금, 구현을 수정해 보겠습니다.
step2/Main.go
package main
import "fmt"
// Singleton is struct
type Singleton struct {
input int
}
func (s *Singleton) getInstance(input int) *Singleton {
s.input = input
return s
}
// MyClass is struct
type MyClass struct {
Singleton
}
var myclass = &MyClass{}
func main() {
one := myclass.getInstance(1)
fmt.Printf("one.input=%d\n", one.input)
two := myclass.getInstance(2)
fmt.Printf("one.input=%d, twe.input=%d\n", one.input, two.input)
one.input = 0
fmt.Printf("one.input=%d, twe.input=%d\n", one.input, two.input)
}
움직여 보자
$ go run step2/Main.go
one.input=1
one.input=2, twe.input=2
one.input=0, twe.input=0
같은 결과가 되었습니다
개인적으로, 이쪽의 쓰는 쪽이, 확실히 오는 느낌입니다
■ 참고 URL
Reference
이 문제에 관하여(Golang에서 디자인 패턴 'Singleton'을 배웁니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ttsubo/items/2498bf77f81b6ed23198텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)