• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • C# 프로그래밍의 기초 : Reflection (리플렉션)
    2024년 03월 03일
    • 유니얼
    • 작성자
    • 2024.03.03.:44
    728x90

    리플렉션은 C# 프로그래밍에서 매우 강력한 기능을 제공하며, 실행 시간(runtime)에 프로그램의 메타데이터를 검사하고 조작할 수 있게 해줍니다. 이를 통해 타입 정보를 동적으로 얻거나, 객체 인스턴스를 생성하고, 메서드를 호출하는 등 다양한 동적 프로그래밍 작업을 수행할 수 있습니다.

    리플렉션의 주요 사용 사례

    • 타입 정보 얻기: 실행 시간에 객체의 타입을 얻어 타입이 가진 멤버(메서드, 프로퍼티, 필드, 이벤트 등) 정보를 조회할 수 있습니다.
    • 동적 인스턴스 생성: Activator.CreateInstance를 사용하여 실행 시간에 객체 인스턴스를 생성할 수 있습니다.
    • 메서드 실행: 리플렉션을 사용해 특정 객체의 메서드를 동적으로 호출할 수 있습니다.
    • 어트리뷰트 접근: 클래스, 메서드, 프로퍼티 등에 적용된 어트리뷰트 정보를 읽어올 수 있습니다.
    • 프로퍼티와 필드 조작: 실행 시간에 객체의 프로퍼티나 필드에 값을 설정하거나 값을 가져올 수 있습니다.

    리플렉션의 장단점

    • 장점: 프로그램의 유연성과 확장성을 높일 수 있으며, 동적 프로그래밍을 가능하게 합니다.
    • 단점: 성능 오버헤드가 발생할 수 있으며, 타입 안전성이 보장되지 않습니다. 또한, 내부 구현을 쉽게 노출할 수 있어 보안상의 문제가 될 수 있습니다.

    예제 코드

    다음 예제는 리플렉션을 사용하여 MyClass 타입의 모든 메서드 이름을 출력하는 방법을 보여줍니다. 또한, 메인 함수에서 이를 실행하는 방법을 포함합니다.

    using System;
    using System.Reflection;
    
    class Program
    {
        class MyClass
        {
            public void Method1() { Console.WriteLine("Method1 실행"); }
            public void Method2() { Console.WriteLine("Method2 실행"); }
        }
        static void Main(string[] args)
        {
            Type type = typeof(MyClass);
            foreach (MethodInfo method in type.GetMethods())
            {
                Console.WriteLine("Method name: " + method.Name);
            }
    
            // MyClass의 인스턴스 생성 및 메서드 호출 예제
            MyClass myClassInstance = (MyClass)Activator.CreateInstance(type);
            MethodInfo methodInfo = type.GetMethod("Method1");
            methodInfo.Invoke(myClassInstance, null);
            //출력 
            // Method name: Method1
            // Method name: Method2
            // Method name: GetType
            // Method name: ToString
            // Method name: Equals
            // Method name: GetHashCode
            // Method1 실행
        }
    }

    이 예제에서는 MyClass 클래스를 정의하고, Main 메서드에서 리플렉션을 사용하여 MyClass의 타입 정보를 얻은 다음, 이 타입이 가진 모든 메서드의 이름을 출력합니다. 또한, Activator.CreateInstance를 사용하여 MyClass의 인스턴스를 동적으로 생성하고, 특정 메서드(Method1)를 호출하는 방법을 보여줍니다.

    결론

    리플렉션은 C# 프로그래밍에서 강력한 동적 프로그래밍 기능을 제공하지만, 사용 시 성능과 보안 측면을 고려해야 합니다. 필요한 경우에만 적절하게 사용하면, 프로그램의 유연성과 확장성을 크게 향상시킬 수 있습니다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바