[go] reflect 패키지를 이용한 동적 메서드 호출

Go 언어에서는 reflect 패키지를 사용하여 동적으로 값을 조사하고 조작할 수 있습니다. 이를 이용하여 어떤 타입의 객체든지 그에 맞는 메서드를 동적으로 호출할 수 있습니다.

reflect 패키지의 TypeValue 타입을 이용하여 객체의 타입과 값을 조사할 수 있습니다. 이를 통해 해당 객체가 가지고 있는 메서드 및 필드를 알아낼 수 있습니다.

예를 들어, 다음은 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 언어에서 동적으로 메서드를 호출하는 방법을 알아보았습니다.