본문 바로가기
프로그래밍언어 & 프레임워크/C#

C# 특성(Attribute)과 리플렉션(Reflection) 맛보기

by 공부하는개미 2021. 6. 10.
반응형

 

 

 

아래 글은 C# 특성(Attribute)과 리플렉션(Reflection) 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 46단원 특성과 리플렉션 614 ~ 627페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 46. 특성과 리플렉션]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

https://www.youtube.com/watch?v=oWoclcZhcUQ 

 

 

 

 

 

✳ 특성(Attribute)

 

  • 프로그램에서 형식, 멤버 및 다른 엔터티에 대한 추가 선언 정보를 지정 가능
  • 자동차 튜닝 -> 없었던 기능을 꾸며준다

 

 

 

 

✳ 리플렉션(Reflection)

 

  • CLR을 자기 자신에 대한 내용을 노출시켜주는 API를 제공
  • System.Typpe으로 리플렉션을 구현
  • 자동차 전시회
    -> 리플렉션(반사?)
       => 광택이 적용된 럭셔리 자동차들
  • 동적으로 특정한 형식의 멤버를 가져오려고 한다.

 

 

 

✳ 특성(Attribute)관련 예제코드

using System;

class 특성
{
    /// <summary>
    /// 닷넷 1.0 버전
    /// </summary>
    [
        Obsolete(
            "현재 메서드는 오래된 버전이므로, Say2()를 사용하세요.", false)
    ]
    public static void Say1()
    {
        Console.WriteLine("안녕");
    }
    /// <summary>
    /// 닷넷 2.0 버전 이상
    /// </summary>
    public static void Say2()
    {
        Console.WriteLine("안녕하세요");
    }
    static void Main(string[] args)
    {
        //Say1(); // 이 메서드 호출시 경고 또는 에러 발생
        Say2();
    }
}

 

 

 

 

 

✳ 리플렉션(Reflection)관련 예제코드

//[?] 리플렉션: 특정 클래스 등에 대한 정보(메타데이터)를 반환시켜주는 기능
using System;
using System.Reflection;

namespace 리플렉션_멤버정보
{
    class Test
    {
        public void TestMethod() { }
    }

    class 리플렉션_멤버정보
    {
        static void Main()
        {
            // Test 클래스에 대한 멤버 정보 얻기
            Type t = typeof(Test);

            // 인스턴스 멤버 기준으로 출력
            // MemberInfo[] members = t.GetMembers();

            // 원하는 멤버를 조건에 따라 출력
            MemberInfo[] members = t.GetMembers(
                BindingFlags.Instance | BindingFlags.Static |
                BindingFlags.NonPublic | BindingFlags.Public
            ); 

            // 멤버 출력: C# 버전에 따라 다르게 출력될 수 있음
            foreach (var member in members)
            {
                Console.WriteLine("{0}", member.Name);
            }
        }
    }
}

 

 

반응형