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
}
위의 예제에서 name과 age 필드는 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 필드에 접근하고 출력합니다.
패키지 접근 제어
패키지의 함수, 변수, 상수 및 구조체도 마찬가지로 public 및 private으로 접근 제어가 가능합니다. 기본적으로 패키지에 속한 식별자는 public이며, 대문자로 시작합니다.
private 식별자는 소문자로 시작하며, 해당 식별자를 다른 패키지에서 접근할 수 없습니다.
package mypackage
var publicVariable int // public
var privateVariable int // private (can't be accessed from other packages)
위의 예제에서 publicVariable은 public으로 선언되어 다른 패키지에서 접근할 수 있습니다. 반면에 privateVariable은 private으로 선언되어 다른 패키지에서 접근할 수 없습니다.
이렇게 구조체와 패키지에서의 접근 제어를 통해 코드의 안정성을 높이고, 의도치 않은 버그를 방지할 수 있습니다.