C#에서 Type.GetNestedTypes() 메서드는 현재 Type 객체 내부에 중첩되어 있는 형식(nested types)들을 조회하는 데 사용됩니다. 클래스나 구조체 안에 선언된 중첩 클래스 목록을 런타임에 확인해야 할 때 유용하게 활용할 수 있습니다.
구문(Syntax)
이 메서드는 두 가지 오버로드 형태로 제공됩니다.
public Type[] GetNestedTypes (); public abstract Type[] GetNestedTypes (System.Reflection.BindingFlags bindingAttr);
- GetNestedTypes() – 매개변수 없이 호출하면 public 및 non-public 중첩 형식을 모두 반환합니다.
- GetNestedTypes(BindingFlags) –
BindingFlags를 지정하여 검색 범위를 필터링할 수 있습니다.
예제 1: 기본 사용법
다음은 Type.GetNestedTypes() 메서드를 구현한 기본 예제입니다.
using System;
public class Demo {
public static void Main(){
Type type1 = typeof(Subject);
try {
Type[] type2 = type1.GetNestedTypes();
Console.WriteLine("중첩 형식 목록...");
for (int i = 0; i < type2.Length; i++)
Console.WriteLine("{0} ", type2[i]);
}
catch (ArgumentNullException e){
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject{
public class BasicSubject {
//
}
public class AdvSubject {
//
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
중첩 형식 목록... Subject+BasicSubject Subject+AdvSubject
출력에서 볼 수 있듯이 중첩 형식의 이름은 외부 클래스 이름과 '+' 기호로 연결되어 표시됩니다(예: Subject+BasicSubject).
예제 2: BindingFlags 활용하기
이번에는 BindingFlags.Public 옵션을 사용하여 public으로 선언된 중첩 형식만 필터링하는 예제를 살펴보겠습니다.
using System;
using System.Reflection;
public class Demo {
public static void Main(){
Type type1 = typeof(Subject);
try {
Type[] type2 = type1.GetNestedTypes(BindingFlags.Public);
Console.WriteLine("중첩 형식 목록...");
for (int i = 0; i < type2.Length; i++)
Console.WriteLine("{0} ", type2[i]);
}
catch (ArgumentNullException e){
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
public class Subject{
public class BasicSubject {
//
}
public class AdvSubject {
//
}
}출력 결과
두 중첩 클래스가 모두 public으로 선언되어 있으므로 동일한 결과가 출력됩니다.
중첩 형식 목록... Subject+BasicSubject Subject+AdvSubject
정리
Type.GetNestedTypes() 메서드는 리플렉션(reflection)을 통해 특정 형식 내부의 중첩 클래스를 동적으로 탐색할 때 핵심적인 역할을 합니다. 매개변수 없이 호출하면 모든 중첩 형식을 반환하고, BindingFlags를 함께 지정하면 접근 수준(public, non-public 등)에 따라 검색 결과를 세밀하게 제어할 수 있습니다.