일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Svelte LifeCycle
- 인라인핸들러
- testing
- go
- react
- ...$$restProps
- onDestory
- cron
- JavaScript
- svelte
- TypeScript
- GraphQL
- nestjs
- IAC
- docker-network
- githook
- 도커
- 도커컨테이너
- Terraform
- reactjs
- golang
- apiTest
- bitwiseNot
- GIT
- smui
- 번역
- docker
- mock
- :=
- PostgreSQL
Archives
- Today
- Total
Den`s blog
Golang singleton pattern 과 init 함수 본문
반응형
Singleton Pattern 은 가장 흔하게 볼 수 있는 디자인 패턴 중에 하나이다.
정의를 간단하게 보자면 아래와 같다.
클래스를 하나의 객체로만 제한하는 것
간단하게 Go 코드로 보면 아래와 같다.
type User struct {
name string
}
var user *User
func init() {
user = &User{name :"den"}
}
func GetUser() *User {
return user
}
user 라는 변수는 init 이라는 함수안에서만 생성이 되고, GetUser 를 통해서만 접근이 가능한 코드이다.
Go 에서는 다른 패키지의 함수를 호출할 수 있는 조건이 대문자로 시작하는 경우이기 때문에
다른 패키지에서는 GetUser 만 호출이 가능하다.
그렇다면 init 은 패키지 안에서만 사용하느냐 인데
Singleton Pattern 을 사용하고 그 대상이 되는 파일 (원래는 클래스이나 Go는 클래스가 없어, 파일이라 하겠다) 은 고유한 패키지로 관리하는 게 낫다는 점에서 볼때, init 을 호출할 수 있는 곳은 없다.
그럼 어떻게 하나 ?
사실 이 init 은 특별한 능력이 있는 함수인데
package 가 최초 로드 (import) 될 때
딱 한번 실행을 자동으로 해주는 함수이다.
즉,
해당 파일을 import 할 때, 자동으로 실행이 되며,
그 횟수도 딱 한번으로 지정되기에 singleton pattern 에서 유용하게 사용이 가능하다.
728x90
반응형
'GoLang' 카테고리의 다른 글
Golang) := and = (0) | 2022.03.02 |
---|---|
Golang Version Update/Upgrade (0) | 2021.12.05 |
[Golang] runtime.Goexit vs os.Exit (0) | 2021.08.15 |
GoLang 테스트 전체 돌리기 (0) | 2021.07.22 |
GoLang + Swagger (0) | 2021.03.15 |
Comments