[go] reflect 패키지를 이용한 동적 메서드 호출
Go 언어에서는 reflect
패키지를 사용하여 동적으로 값을 조사하고 조작할 수 있습니다. 이를 이용하여 어떤 타입의 객체든지 그에 맞는 메서드를 동적으로 호출할 수 있습니다.
reflect
패키지의 Type
과 Value
타입을 이용하여 객체의 타입과 값을 조사할 수 있습니다. 이를 통해 해당 객체가 가지고 있는 메서드 및 필드를 알아낼 수 있습니다.
예를 들어, 다음은 reflect
를 이용하여 동적으로 메서드를 호출하는 간단한 예시입니다.
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func (p Person) Greet() {
fmt.Println("Hello, my name is", p.Name)
}
func main() {
p := Person{Name: "Alice", Age: 30}
reflectValue := reflect.ValueOf(p)
method := reflectValue.MethodByName("Greet")
method.Call([]reflect.Value{})
}
위의 예시에서 reflectValue.MethodByName("Greet")
를 통해 Person
객체의 Greet
메서드를 찾아서 Call
을 통해 메서드를 호출합니다.
reflect
패키지를 이용하면 좀 더 유연한 구조를 가진 프로그램을 작성할 수 있습니다. 하지만 과도한 사용은 코드의 가독성을 떨어뜨릴 수 있으므로 적절하게 활용하는 것이 중요합니다.
이렇게 reflect
패키지를 이용하여 Go 언어에서 동적으로 메서드를 호출하는 방법을 알아보았습니다.