[go] 구조체(struct)와 패키지(private, public) 접근 제어

Go 언어에서는 구조체와 패키지의 접근 제어에 대한 기능을 제공합니다. 구조체는 데이터를 그룹화하는 데 사용되며, 패키지는 코드를 모듈화하고 재사용성을 높이는 데 사용됩니다. 이러한 기능들은 코드의 가독성과 유지보수성을 향상시키는 데 큰 도움을 줍니다.

구조체 접근 제어

구조체의 필드는 기본적으로 public으로 선언됩니다. 다른 패키지에서 구조체의 필드에 접근하려면 필드의 이름이 대문자로 시작해야 합니다. 만약 필드의 이름이 소문자로 시작하면 private으로 간주되어 다른 패키지에서 접근할 수 없습니다.

package main

import "fmt"

type Person struct {
    name string  // private
    age  int     // private
}

func main() {
    person := Person{"John Doe", 25}
    fmt.Println(person.name)  // Error: cannot refer to unexported field 'name' in struct literal
}

위의 예제에서 nameage 필드는 private이므로 main 패키지에서 접근할 수 없습니다.

private 필드에 접근하기 위해서는 public 메소드를 통해 접근해야 합니다.

package main

import "fmt"

type Person struct {
    name string  // private
    age  int     // private
}

func (p Person) getName() string {
    return p.name
}

func main() {
    person := Person{"John Doe", 25}
    fmt.Println(person.getName())  // John Doe
}

위의 예제에서는 getName 메소드를 사용하여 name 필드에 접근하고 출력합니다.

패키지 접근 제어

패키지의 함수, 변수, 상수 및 구조체도 마찬가지로 publicprivate으로 접근 제어가 가능합니다. 기본적으로 패키지에 속한 식별자는 public이며, 대문자로 시작합니다.

private 식별자는 소문자로 시작하며, 해당 식별자를 다른 패키지에서 접근할 수 없습니다.

package mypackage

var publicVariable int  // public

var privateVariable int  // private (can't be accessed from other packages)

위의 예제에서 publicVariablepublic으로 선언되어 다른 패키지에서 접근할 수 있습니다. 반면에 privateVariableprivate으로 선언되어 다른 패키지에서 접근할 수 없습니다.

이렇게 구조체와 패키지에서의 접근 제어를 통해 코드의 안정성을 높이고, 의도치 않은 버그를 방지할 수 있습니다.

참고 자료