bdfgdfg

Reflection / Attribute 본문

게임프로그래밍/C#

Reflection / Attribute

marmelo12 2021. 8. 6. 22:58
반응형

Reflection

C#에서는 내가 정의한 클래스를 통해 만든 객체에 접근해보면.

내가 만들지 않은 다른 여러 기능들이 존재한다.

이것은 C#에서 만드는 모든 객체들은 모두 위 그림처럼 object클래스에서 파생되서 나온 것이기 때문.

 

여기서 주의깊게 봐야할 것은 GetType.

이녀석은 Type이란 자료를 가져온다.

이것으로 할 수 있는게 매우 많은데 클래스의 이름이라던지 해당 클래스내의 멤버라던지등 모든 정보를 가져올 수 있다.

이런식으로 클래스안의 내부 멤버에 접근할 수 있다.

 

참고로 Flag란 이름에서 알 수 있듯이. 여러 옵션을 찾기위해 |(or연산)을 해준다.

System.Reflection.FieldInfo[] field = type.GetFields(System.Reflection.BindingFlags.Public
     | System.Reflection.BindingFlags.NonPublic
     | System.Reflection.BindingFlags.Static
     | System.Reflection.BindingFlags.Instance
     );

(참고로 GetFields가 반환하는것은 System.Reflection.FieldInfo[].)

 

이렇게 가져온 field를 통해 배열을 모두 순회하면서 데이터를 하나씩 뽑아오고 그 정보를 런타임에 확인가능하다.

이렇게 멤버정보를 얻는것 뿐만아니라 정말 많은 정보를 얻어올 수 있다.

 

 

Attribute

Attribute 런타임에 참고할 수 있는 정보를 얻을 수 있다.(ex 주석)

이러한 정보도. Type을 통해 얻어올 수 있다.

이렇게. 우리가 설정한 Attributes값을 얻어올 수 있다.

확인해보면

 

실제로 유니티에서 클래스내 필드 멤버중 public으로 열려있는 스크립트는 인스펙터창에서 실시간(런타임)으로 수정이 가능한것도 이 Reflection 기능 덕분이라고 한다.

반응형

'게임프로그래밍 > C#' 카테고리의 다른 글

[C#] 부모 자식 사이의 형 변환 (is,as)  (0) 2022.04.18
[C#] ref,out 키워드  (0) 2022.04.18
[C#] 문자열 다루기  (0) 2022.04.18
[C#] C#의 데이터 형식  (0) 2022.04.17
[C#] CLR(Common Language Runtime)  (0) 2022.04.17
Comments