ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Go에서 함수와 상수 이름의 시작 규칙 (대문자 vs. 소문자)
    Dev 2025. 3. 3. 21:58
    728x90

    Go 언어에서는 함수, 변수, 상수, 구조체 이름대문자로 시작하는지, 소문자로 시작하는지에 따라 접근 범위(Scope)가 결정됩니다.


    1. 대문자로 시작 (Exported, 외부 패키지에서 접근 가능)

    • 대문자로 시작하는 이름패키지 외부에서도 접근 가능합니다.
    • 즉, 공개(Exported)된 함수, 변수, 상수, 구조체가 됩니다.
    • 이 방식은 다른 패키지에서 사용될 것이 예상되는 경우에 사용됩니다.

    예제 (대문자로 시작, Exported):

    package mypackage
    
    // PublicFunction can be accessed from other packages.
    func PublicFunction() {
        fmt.Println("This is a public function.")
    }
    
    // PublicConstant is accessible from other packages.
    const PublicConstant = "I am public"

     

    📌 다른 패키지에서 사용 가능

    import "mypackage"
    
    func main() {
        mypackage.PublicFunction()  // ✅ Works
        fmt.Println(mypackage.PublicConstant)  // ✅ Works
    }

     

    2. 소문자로 시작 (Unexported, 패키지 내부에서만 접근 가능)

    • 소문자로 시작하는 이름패키지 내부에서만 사용 가능합니다.
    • 즉, 비공개(Unexported)된 함수, 변수, 상수가 됩니다.
    • 패키지 외부에서는 접근할 수 없습니다.

    예제 (소문자로 시작, Unexported):

    package mypackage
    
    // privateFunction can only be accessed within mypackage.
    func privateFunction() {
        fmt.Println("This is a private function.")
    }
    
    // privateConstant is only accessible within mypackage.
    const privateConstant = "I am private"

     

    📌 다른 패키지에서 사용 불가능

    import "mypackage"
    
    func main() {
        mypackage.privateFunction()  // ❌ ERROR: Cannot access
        fmt.Println(mypackage.privateConstant)  // ❌ ERROR: Cannot access
    }

    🔴 컴파일 오류 발생: "mypackage.privateFunction" is not accessible
    🔴 "mypackage.privateConstant" is not accessible

     

    3. Go에서 함수 및 상수의 네이밍 규칙

    📌 상황에 따라 대문자 또는 소문자로 시작하는 것이 맞습니다.

    사용 목적네이밍 규칙예제

    패키지 외부에서 사용 (Public) 대문자 시작 func PublicFunction()
    패키지 내부에서만 사용 (Private) 소문자 시작 func privateFunction()
    공개된 상수 (Public) 대문자 시작 const PublicConstant = "..."
    패키지 내부 상수 (Private) 소문자 시작 const privateConstant = "..."
    구조체 (Public) 대문자 시작 type User struct {}
    구조체 필드 (Public) 대문자 시작 type User struct { Name string }
    구조체 필드 (Private) 소문자 시작 type user struct { age int }

     

    4. 결론

    • 패키지 외부에서 접근해야 하는 함수/변수/상수 → 대문자 (Exported)
    • 패키지 내부에서만 사용할 함수/변수/상수 → 소문자 (Unexported)
    • 현재 dataDir, saveToFile, updateStatusToActive는 소문자로 시작하는 것이 맞음
    • Go 프로그램의 main() 함수는 항상 소문자로 시작 (func main())

    📌 Best Practice:
    Go에서는 불필요하게 Exported (대문자 시작)를 만들지 않고, 최소한의 공개 함수만 유지하는 것이 일반적입니다.

    728x90
Designed by Tistory.