Go 언어에서 reflect
패키지는 임의의 값에 대한 타입 정보를 조사하고, 값 자체를 조작할 수 있는 기능을 제공합니다. 이를 통해 유연하고 동적인 프로그래밍을 할 수 있습니다.
reflect 패키지 소개
reflect
패키지는 런타임에 임의의 타입을 조사하고 조작하는 기능을 제공합니다. 예를 들어, 변수의 타입을 확인하거나 동적으로 값을 설정하거나 메소드를 호출할 수 있습니다.
타입 정보 확인
reflect
패키지를 사용하여 값의 타입 정보를 확인할 수 있습니다. 예를 들어, 아래와 같이 코드를 작성할 수 있습니다.
package main
import (
"fmt"
"reflect"
)
func main() {
var num int = 10
fmt.Println(reflect.TypeOf(num))
}
위 예제에서 reflect.TypeOf
함수를 사용하여 num
변수의 타입을 확인할 수 있습니다.
값 설정
reflect
패키지를 사용하여 값을 동적으로 설정할 수도 있습니다. 아래 코드는 정수형 변수에 새로운 값을 설정하는 예제입니다.
package main
import (
"fmt"
"reflect"
)
func main() {
var num int = 10
value := reflect.ValueOf(&num)
value.Elem().SetInt(20)
fmt.Println(num) // 출력: 20
}
위 예제에서 reflect.ValueOf
함수를 사용하여 변수의 값을 가져온 후, Elem
메소드로 해당 값을 설정할 수 있습니다.
메소드 호출
reflect
패키지를 사용하여 메소드를 동적으로 호출할 수도 있습니다. 아래 코드는 문자열 변수의 Len
메소드를 호출하는 예제입니다.
package main
import (
"fmt"
"reflect"
)
func main() {
str := "hello"
value := reflect.ValueOf(str)
methodValue := value.MethodByName("Len")
result := methodValue.Call([]reflect.Value{})
fmt.Println(result[0].Int()) // 출력: 5
}
위 예제에서는 reflect.ValueOf
함수를 사용하여 값을 가져온 후, MethodByName
메소드로 해당 메소드를 호출할 수 있습니다.
결론
Go 언어의 reflect
패키지를 사용하면 임의의 값에 대한 타입 정보를 확인하고, 값을 설정하거나 메소드를 호출하는 등 다양한 동적 프로그래밍 기능을 수행할 수 있습니다. 이를 통해 보다 유연하고 강력한 프로그램을 작성할 수 있습니다.
더 많은 정보는 Go 언어 공식 문서에서 확인할 수 있습니다.