본문 바로가기
Programing/Go

golang package 는 싱글톤 인가?

by 멍멍돌이야 2024. 6. 12.
반응형

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
반응형

댓글