[go] Go 언어의 리플렉션

Go 언어에는 리플렉션(Reflection) 기능이 내장되어 있습니다. 리플렉션은 프로그램 실행 중에 데이터의 형식(type)을 조사하거나 수정하는 기능을 제공합니다. Go에서 리플렉션은 reflect 패키지를 통해 제공됩니다.

리플렉션의 사용 예시

리플렉션을 사용하여 동적으로 타입 정보를 확인하거나 구조체 필드의 값을 변경할 수 있습니다.

다음은 reflect 패키지를 사용하여 구조체 필드의 값을 변경하는 예시입니다:

package main

import (
    "fmt"
    "reflect"
)

type Person struct {
    Name  string
    Age   int
}

func main() {
    p := Person{Name: "Alice", Age: 30}

    // 구조체의 필드 값을 변경
    v := reflect.ValueOf(&p).Elem()
    v.FieldByName("Age").SetInt(31)

    fmt.Println(p) // {Alice 31}
}

위 예시에서는 reflect.ValueOf 함수를 사용하여 구조체 Person의 인스턴스를 가져와서 해당 필드의 값을 변경했습니다.

리플렉션은 타입 정보를 동적으로 조작할 수 있는 강력한 도구이지만, 남용하게 되면 코드의 가독성이 떨어지고 성능에도 영향을 미칠 수 있으므로 신중하게 사용해야 합니다.

결론

Go의 리플렉션은 프로그램 실행 중에 타입 정보를 조사하거나 수정할 수 있는 강력한 기능을 제공합니다. 이를 통해 동적으로 타입 정보를 다루는 기능을 구현할 수 있으며, 제한적으로 사용하면 유용하게 활용할 수 있습니다.

리플렉션에 대한 더 자세한 내용은 공식 Go 언어 문서를 참고하시기 바랍니다.

Go 언어 공식 문서 - reflect