[C# 문법] Reflection 이용하여 Class 속성, 값 출력하기
- C#/C# 문법
- 2021. 12. 16. 21:55
소개
- 안녕하세요. 오늘은 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
'C# > C# 문법' 카테고리의 다른 글
[C# 문법] 사용자 지정 예외 클래스 만들기 (0) | 2021.12.27 |
---|---|
[C# 벤치마크] C# BenchMarkDotNet ParamsSource 사용법 (0) | 2021.12.17 |
[C# 문법] XML, JSON, MessagePack 직렬화, 역직렬화 성능 측정(벤치마크) (0) | 2021.12.16 |
[C# 문법] MessagePack ObservableCollection 직렬화, 역직렬화 (0) | 2021.12.16 |
[C# 문법] MessagePack 사용 방법 - 직렬화, 역직렬화 (0) | 2021.12.15 |
이 글을 공유하기