[C# 문법] Reflection 이용하여 Class 속성, 값 출력하기

소개

  • 안녕하세요. 오늘은 C# 문법에서 Reflection 문법을 이용하여 Class 객체의 값과 속성을 추출하여 출력하는 방법에 대해서 알려 드리려고 합니다.
  • 또한, Class 속성의 List와 같은 컬렉션 속성이 있을 경우에도 Reflection 을 이용하여 속성의 값을 출력하는 방법까지 예제 코드를 통해서 알려 드리겠습니다.

예제 코드

  • 예제 코드는 Student, School 2개의 클래스를 우선 생성하였습니다.
  • 학생, 학교 객체를 하나씩 생성하고, PrintPropertyInfo 제네릭 메서드를 만들어서 각 Class 의 객체의 값과 속성을 출력하도록 코드를 작성하였습니다.
  • 또한, Student 클래스 안에는 List<string> 컬렉션 객체 friends 라고 해서 학생의 친구 목록을 저장하고 있는 컬렉션 객체도 있습니다.
  • 컬렉션 객체는 PrintToListTypePropertyInfo 메서드를 통해서 값과 속성이 출력 되도록 하였습니다.
using System;
using System.Collections.Generic;
using System.Reflection;

namespace ReflectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new()
            {
                Name = "범범조조",
                Age = 29
            };

            School school = new()
            {
                SchoolName = "가나다학교",
                Area = "한국",
                since = 2021
            };

            // Student 객체 값 출력
            PrintPropertyInfo<Student>(stu);

            Console.WriteLine();

            // School 객체 값 출력
            PrintPropertyInfo<School>(school);

            // stu 학생의 친구 리스트 목록 생성
            stu.friends = new List<string>
            {
                "Kim", "Jo", "Ahn", "Lee", "Hwan"
            };

            Console.WriteLine();

            // List 속성 출력
            PrintToListTypePropertyInfo(stu, "friends");
        }

        public static void PrintPropertyInfo<T>(T target)
        {
            // Student 객체 값 출력
            foreach (PropertyInfo property in target.GetType().GetProperties())
            {
                Console.WriteLine($"{property.Name} : {property.GetValue(target, null)}");
            }
        }

        public static void PrintToListTypePropertyInfo(Student target, string listName)
        {
            PropertyInfo propertyInfo = target.GetType().GetProperty(listName.ToString());

            object list = propertyInfo.GetValue(target, null);

            List<string> details = (List<string>)list;

            Console.WriteLine($"{target.Name} 학생의 친구들은");
            foreach (var value in details)
            {
                Console.WriteLine($"{value}");
            }
            Console.WriteLine($"입니다.");
        }
    }

    public class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public List<string> friends { get; set; }
    }

    public class School
    {
        public string SchoolName { get; set; }
        public string Area { get; set; }
        public int since { get; set; }
    }
}

실행 결과

  • 실행 결과 Student, School 객체의 값과 속성들이 모두 정상적으로 출력된 것을 확인할 수 있습니다.
Name : 범범조조
Age : 29
friends :

SchoolName : 가나다학교
Area : 한국
since : 2021

범범조조 학생의 친구들은
Kim
Jo
Ahn
Lee
Hwan
입니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY