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

C#의 Type.GetNestedTypes() 메서드 – 중첩 형식(Nested Types) 조회 방법

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 등)에 따라 검색 결과를 세밀하게 제어할 수 있습니다.