Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Type.GetFields() 메서드 완벽 정리 – 필드 정보 조회 방법

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.StaticBindingFlags.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 프레임워크 등 런타임에 객체 구조를 분석해야 하는 상황에서 널리 활용됩니다.