C#에서 Type.GetFields() 메서드는 현재 타입(Type)이 가지고 있는 필드(Field) 정보를 조회할 때 사용하는 리플렉션(Reflection) API입니다. 이 메서드를 활용하면 클래스 내부에 선언된 public 필드뿐만 아니라, BindingFlags 옵션을 조합하여 private나 static 같은 비공개 필드까지 동적으로 확인할 수 있습니다.
문법(Syntax)
GetFields() 메서드의 기본 문법은 다음과 같습니다.
public System.Reflection.FieldInfo[] GetFields();
매개변수 없이 호출하면 해당 타입의 public 인스턴스 및 static 필드만 반환됩니다. 더 세밀한 조회가 필요하다면 아래 예제처럼 BindingFlags 열거형을 인자로 전달할 수 있습니다.
예제 1 – String 타입의 비공개 필드 조회
다음은 System.String 타입에 선언된 non-public(비공개) 필드를 조회하는 예제입니다.
using System;
using System.Reflection;
public class Demo {
public static void Main(){
Type type = typeof(System.String);
FieldInfo[] fields = type.GetFields(BindingFlags.Static | BindingFlags.NonPublic);
Console.WriteLine("다음은 비공개(non-public) 필드 목록입니다=");
foreach (FieldInfo myField in fields){
Console.WriteLine(myField.ToString());
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
다음은 비공개(non-public) 필드 목록입니다= Int32 TrimHead Int32 TrimTail Int32 TrimBoth Int32 charPtrAlignConst Int32 alignConst
BindingFlags.Static과 BindingFlags.NonPublic을 함께 지정했기 때문에, String 클래스 내부에 숨겨져 있는 정적(static) 비공개 필드들이 모두 출력되는 것을 확인할 수 있습니다.
예제 2 – Char 타입의 비공개 필드 조회
이번에는 System.Char 타입을 대상으로 동일한 방식으로 필드를 조회해 보겠습니다.
using System;
using System.Reflection;
public class Demo {
public static void Main(){
Type type = typeof(System.Char);
FieldInfo[] fields = type.GetFields(BindingFlags.Static | BindingFlags.NonPublic);
Console.WriteLine("\n다음은 비공개(non-public) 필드 목록입니다=");
foreach (FieldInfo myField in fields){
Console.WriteLine(myField.ToString());
}
}
}실행 결과
실행하면 Char 구조체 내부의 비공개 정적 필드가 다음과 같이 출력됩니다.
다음은 비공개(non-public) 필드 목록입니다= Byte[] categoryForLatin1 Int32 UNICODE_PLANE00_END Int32 UNICODE_PLANE01_START Int32 UNICODE_PLANE16_END Int32 HIGH_SURROGATE_START Int32 LOW_SURROGATE_END
정리
Type.GetFields()는 리플렉션을 통해 타입의 필드 정보를 동적으로 탐색할 수 있는 강력한 메서드입니다. 주요 특징을 정리하면 다음과 같습니다.
- 반환값은
FieldInfo[]배열로, 각 요소를 통해 필드 이름, 자료형, 접근 제한자 등의 상세 정보를 얻을 수 있습니다. BindingFlags.Public,BindingFlags.NonPublic,BindingFlags.Static,BindingFlags.Instance등의 플래그를 조합하여 원하는 범위의 필드만 선택적으로 조회할 수 있습니다.- 디버깅 도구, 직렬화 라이브러리, ORM 프레임워크 등 런타임에 객체 구조를 분석해야 하는 상황에서 널리 활용됩니다.