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
으로 선언되어 다른 패키지에서 접근할 수 없습니다.
이렇게 구조체와 패키지에서의 접근 제어를 통해 코드의 안정성을 높이고, 의도치 않은 버그를 방지할 수 있습니다.