반응형
Go 언어에서 패키지는 싱글톤이 아닙니다. 그러나 패키지의 변수나 객체는 사실상 싱글톤처럼 동작할 수 있습니다. Go 프로그램이 실행될 때, 각 패키지는 한 번만 초기화됩니다. 이는 패키지의 init 함수가 한 번만 호출되고, 패키지 수준의 변수들이 한 번만 초기화된다는 것을 의미합니다.
이를 통해 패키지 수준의 변수나 객체는 싱글톤 패턴처럼 동작할 수 있습니다. 예를 들어, 데이터베이스 연결을 관리하는 패키지를 만들 때, 해당 패키지의 전역 변수를 통해 데이터베이스 연결을 설정하고 이를 재사용할 수 있습니다.
간단한 예제를 통해 설명해보겠습니다:
package db
import (
"database/sql"
_ "github.com/lib/pq" // PostgreSQL 드라이버
"log"
)
var db *sql.DB
func init() {
var err error
db, err = sql.Open("postgres", "user=yourusername dbname=yourdbname sslmode=disable")
if err != nil {
log.Fatal(err)
}
}
func GetDB() *sql.DB {
return db
}
위 코드에서 db 패키지는 init 함수에서 데이터베이스 연결을 초기화하고, GetDB 함수에서 초기화된 데이터베이스 객체를 반환합니다. 이렇게 하면 프로그램 전체에서 db.GetDB()를 호출하여 동일한 데이터베이스 연결을 사용할 수 있습니다.
이와 같이 Go 언어에서는 패키지 수준 변수와 init 함수를 통해 싱글톤 패턴을 구현할 수 있습니다. 그러나 패키지 자체가 싱글톤이라는 개념은 아닙니다. 패키지는 하나의 논리적 단위로서 여러 번 임포트될 수 있지만, 실제로는 한 번만 초기화된다는 점에서 싱글톤과 유사한 특성을 가질 수 있습니다.
728x90
반응형
'Programing > Go' 카테고리의 다른 글
Golang에서 gRPC의 강력한 기능 공개: HTTP를 통한 엣지를 갖춘 강력하고 건강한 마이크로서비스 구축 (0) | 2024.06.12 |
---|---|
Golang의 명명 규칙: 종합 가이드 (0) | 2024.06.12 |
[GoLang] 2장: GIN 프레임워크 환경 설정 (0) | 2024.06.11 |
[GoLang] 1장: Gin 프레임워크 소개 (0) | 2024.06.11 |
Golang vs Node.js : 다음 프로젝트를 위해 하나를 선택하세요 (0) | 2024.06.11 |
댓글