[go] 구조체(struct)의 읽기 전용(read-only) 필드 정의 방법
Go 언어에서 구조체(struct)는 여러 필드들의 집합체입니다. 이러한 필드들은 구조체의 속성들을 나타내며 값을 저장하거나 가져오는 데 사용됩니다. 그러나 때로는 특정 필드를 읽기 전용으로 만들고 다른 부분에서 해당 필드의 값을 수정하지 못하도록 제한해야 할 수도 있습니다.
Go 언어에서 읽기 전용 필드를 정의하는 방법은 다음과 같습니다:
type Person struct {
name string
age int
gender string
income int
}
func (p Person) GetName() string {
return p.name
}
func (p Person) GetAge() int {
return p.age
}
// ...
func main() {
person := Person{name: "John", age: 30, gender: "Male", income: 50000}
name := person.GetName()
age := person.GetAge()
fmt.Println("Name:", name)
fmt.Println("Age:", age)
// person.name = "Jane" // 컴파일 오류 발생 - 읽기 전용 필드이므로 변경할 수 없음
}
위의 예제에서 Person
구조체의 name
과 age
필드는 읽기 전용으로 정의되었습니다. 이를 위해 해당 필드들의 값을 가져오는 메서드인 GetName()
과 GetAge()
를 구조체에 추가했습니다. 이 메서드들은 구조체의 필드에 직접적인 접근을 허용하지 않고, 필드 값을 반환하는 역할을 수행합니다.
따라서 main()
함수에서 person
구조체를 생성하고 GetName()
과 GetAge()
를 사용하여 필드 값을 얻는 것은 가능하지만, person.name
과 person.age
에 접근하여 값을 변경하는 것은 불가능합니다.
이러한 방법을 통해 읽기 전용 필드를 정의하고 구조체의 불변성을 유지할 수 있습니다.