[go] reflect 패키지의 리플렉션 기능

이번에는 Go 언어에서 제공하는 reflect 패키지의 기능에 대해 알아보겠습니다.

1. 리플렉션이란?

리플렉션(Reflection)은 프로그램이 실행 시에 자신의 구조를 조사하거나 수정할 수 있는 능력을 의미합니다. 즉, 코드를 작성할 때 정적으로 알 수 없는 데이터 타입이나 변수들에 동적으로 접근하는 기술을 말합니다.

2. reflect 패키지

Go 언어에서는 reflect 패키지를 통해 리플렉션을 지원합니다. 이를 사용하면 인터페이스를 통해 값의 유형을 검사하고 조작하는 기능을 제공받을 수 있습니다. 예를 들어, 구조체의 필드 정보 확인, 메서드 호출, 타입 정보 추출 등이 가능합니다.

package main

import (
	"fmt"
	"reflect"
)

type Person struct {
	Name string
	Age  int
}

func main() {
	p := Person{Name: "Alice", Age: 30}
	
	t := reflect.TypeOf(p)
	fmt.Println(t) // 출력: main.Person

	v := reflect.ValueOf(p)
	fmt.Println(v) // 출력: {Alice 30}

	fmt.Println(t.Kind())  // 출력: struct
	fmt.Println(t.NumField())  // 출력: 2
	fmt.Println(t.Field(0).Name)  // 출력: Name
	fmt.Println(t.Field(1).Name)  // 출력: Age
}

3. 활용 예시

리플렉션은 인터페이스를 통해 일반적인 객체를 다루는 기술입니다. 따라서 런타임 시에 동적으로 변수를 조작하거나 타입을 체크하는 등의 다양한 활용이 가능합니다.

이처럼 reflect 패키지는 Go 언어의 동적인 측면에서 매우 유용하게 사용될 수 있는 패키지 중 하나입니다.

참고 자료: Go 언어 공식 문서

위 내용은 Go 언어에서 제공하는 reflect 패키지의 리플렉션 기능에 대한 간략한 소개입니다.