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

C# Type.GetNestedType() 메서드 완벽 정리 - 중첩 타입 조회 방법

C#의 Type.GetNestedType() 메서드는 현재 Type 객체 내부에 정의된 특정 중첩 타입(Nested Type)을 조회할 때 사용됩니다. 리플렉션(Reflection) 기능을 활용해 클래스 내부의 중첩 클래스 정보를 동적으로 가져올 수 있습니다.

구문 (Syntax)

메서드 구문은 다음과 같습니다.

public Type GetNestedType (string name);
public abstract Type GetNestedType (string name, System.Reflection.BindingFlags bindingAttr);

첫 번째 오버로드는 조회할 중첩 타입의 이름을 문자열로 전달받아 해당 타입을 반환합니다. 두 번째 오버로드는 검색 범위와 조건을 세밀하게 지정할 수 있는 BindingFlags 매개변수를 추가로 받습니다.

예제 1

다음은 Type.GetNestedType() 메서드를 사용하는 기본적인 예제입니다.

using System;
public class Demo {
   public static void Main(){
      Type type1 = typeof(Subject);
      try {
         Type type2 = type1.GetNestedType("AdvSubject");
         Console.Write("NestedType = "+ type2);
      }
      catch (ArgumentNullException e){
         Console.Write("{0}", e.GetType(), e.Message);
      }
   }
}
public class Subject{
   public class BasicSubject {
      //
   }
   public class AdvSubject {
      //
   }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

NestedType = Subject+AdvSubject

Subject 클래스 내부에 선언된 AdvSubject 중첩 클래스가 성공적으로 조회되었습니다. C#에서 중첩 타입은 일반적으로 '외부클래스명+중첩클래스명' 형식으로 표시됩니다.

예제 2

이번에는 name 매개변수에 null을 전달했을 때 어떻게 동작하는지 살펴보겠습니다.

using System;
public class Demo {
   public static void Main(){
      Type type1 = typeof(Subject);
      try {
         Type type2 = type1.GetNestedType(null);
         Console.Write("NestedType = "+ type2);
      }
      catch (ArgumentNullException e){
         Console.Write("{0}", e.GetType(), e.Message);
      }
   }
}
public class Subject{
   public class BasicSubject {
      //
   }
   public class AdvSubject {
      //
   }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

System.ArgumentNullException

name 매개변수로 null을 전달하면 ArgumentNullException 예외가 발생합니다. 따라서 실무에서는 이러한 예외 상황을 대비해 try-catch 블록으로 처리하거나, 메서드 호출 전에 인자 값의 유효성을 검사하는 것이 좋습니다. 또한 존재하지 않는 이름을 전달하면 예외 대신 null이 반환되므로, 반환값의 null 여부를 확인하는 것도 안전한 코딩 습관입니다.