[go] reflect 패키지를 활용한 리플렉션 예시

Go 언어에서는 reflect 패키지를 활용하여 런타임에 데이터 타입을 확인하고 조작할 수 있습니다. 이번 포스트에서는 reflect 패키지를 사용하여 구조체 내의 필드 정보를 동적으로 조작하는 예시를 살펴보겠습니다.

reflect 패키지 소개

reflect 패키지는 Go 언어에서 런타임에 데이터의 타입 정보를 확인하고 조작하는 기능을 제공합니다. 구체적으로는 Type, Value, TypeOf, ValueOf 등의 메서드를 통해 값을 조작하거나 해당 값의 타입 정보를 확인할 수 있습니다.

예시 코드

다음은 reflect 패키지를 사용하여 구조체의 필드 정보를 출력하는 예시 코드입니다.

package main

import (
	"fmt"
	"reflect"
)

type Person struct {
	Name string
	Age  int
}

func main() {
	p := Person{"Alice", 30}
	
	v := reflect.ValueOf(p)
	
	for i := 0; i < v.NumField(); i++ {
		field := v.Field(i)
		fmt.Printf("Field %d: %s\n", i, field)
	}
}

위 코드에서는 reflect 패키지의 ValueOf 메서드를 사용하여 구조체 Person의 인스턴스 preflect.Value 타입으로 변환합니다. 그리고 NumField 메서드로 필드의 개수를 얻어 반복문을 통해 각 필드의 값을 출력합니다.

이 예시를 실행하면 “Field 0: Alice”와 “Field 1: 30”과 같은 결과를 얻을 수 있습니다.

결론

reflect 패키지를 사용하면 런타임에 데이터 타입을 확인하고 조작할 수 있어서 동적인 프로그래밍에 유용합니다. 필요에 따라 구조체나 인터페이스의 필드를 조작하고 상세한 타입 정보를 확인하는 등의 작업을 할 수 있습니다.

이를 통해 유연하고 동적인 프로그래밍을 구현할 수 있으며, Go 언어의 강력한 기능 중 하나로 활용될 수 있습니다.