[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 구조체의 nameage 필드는 읽기 전용으로 정의되었습니다. 이를 위해 해당 필드들의 값을 가져오는 메서드인 GetName()GetAge()를 구조체에 추가했습니다. 이 메서드들은 구조체의 필드에 직접적인 접근을 허용하지 않고, 필드 값을 반환하는 역할을 수행합니다.

따라서 main() 함수에서 person 구조체를 생성하고 GetName()GetAge()를 사용하여 필드 값을 얻는 것은 가능하지만, person.nameperson.age에 접근하여 값을 변경하는 것은 불가능합니다.

이러한 방법을 통해 읽기 전용 필드를 정의하고 구조체의 불변성을 유지할 수 있습니다.