โ ๋ฆฌํ๋ ์ (Reflection)
๋ฐํ์์ ์ด์ ๋ธ๋ฆฌ, ๋ชจ๋, ํ์ , ๋ฉค๋ฒ๋ฑ์ ์ ๋ณด๋ฅผ ๋์ ์ผ๋ก ์กฐ์ฌํ๊ณ ์กฐ์ํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ผ๋ก System.Reflection ๋ค์์คํ์ด์ค์ ํฌํจ๋ ํด๋์ค์ ์ธํฐํ์ด์ค๋ค์ ํตํด ์ ๊ณต๋๋ค.
โ ์ฃผ์ ๊ธฐ๋ฅ
- ํ์ ์กฐ์ฌ : ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์์ ์กฐ์ฌํ ์ ์๋ค.
- ๊ฐ์ฒด ์์ฑ : ์์ฑํ ๊ฐ์ฒด์ ํ์ ์ ๋ฐํ์์ ๋์ ์ผ๋ก ๊ฒฐ์ ํ ์ ์๋ค.
- ๋ฉ์๋ ํธ์ถ : ๋ฉ์๋ ์ด๋ฆ์ด๋ ์๊ทธ๋์ฒ๋ฅผ ๋ฐํ์์ ๊ฒฐ์ ํ์ฌ ๋์ ์ผ๋ก ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
- ์์ฑ ๋ฐ ํ๋ ์ ๊ทผ : ๋ฐํ์์ ๊ฐ์ฒด์ ์์ฑ ๋ฐ ํ๋ ๊ฐ์ ์ฝ๊ฑฐ๋ ์์ ํ ์ ์๋ค.
- ์ด์ ๋ธ๋ฆฌ ๋ก๋ : ์ด์ ๋ธ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ๊ณ ๊ทธ ์์ ํฌํจ๋ ํ์ ๊ณผ ๋ฉ์๋ ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
โ ์ฌ์ฉ ์์
- ํ์ ์ ๋ํ ์ ๋ณด (ex ํด๋์ค์ ๋ชจ๋ ๋ฉ์๋)
MethodInfo[] methods = typeof(MyClass).GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
- ๋ฐํ์์ ๊ฐ์ฒด ์์ฑ ๋ฐ ๋ฉ์๋ ํธ์ถ
// ๊ฐ์ฒด ์์ฑ
object obj = Activator.CreateInstance(typeof(MyClass));
// ๋ฉ์๋ ํธ์ถ
MethodInfo method = typeof(MyClass).GetMethod("MyMethod");
method.Invoke(obj, null);
- ์์ฑ ๊ฐ ์ฝ๊ธฐ ๋ฐ ์ค์
// ์์ฑ ์ค์
PropertyInfo property = typeof(MyClass).GetProperty("MyProperty");
property.SetValue(obj, 42);
// ์์ฑ ์ฝ๊ธฐ
int value = (int)property.GetValue(obj);
- ์ด์ ๋ธ๋ฆฌ ๋ก๋ ๋ฐ ์ด์ ๋ธ๋ฆฌ ๋ด ํ์ ์กฐ์ฌ
// ์ด์
๋ธ๋ฆฌ ๋ก๋
Assembly assembly = Assembly.Load("mscorlib");
// ์ด์
๋ธ๋ฆฌ ๋ด ํ์
๋์ด
Type[] types = assembly.GetTypes();
โ ๊ณ ๋ ค์ฌํญ
- ์ฑ๋ฅ
๋ฆฌํ๋ ์ ์ ๋ฐํ์์ ๋์ ์ผ๋ก ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์กฐ์ฌํ๊ณ , ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋น๋ฒํ ํธ์ถ์ ์ฑ๋ฅ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ณด์
๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ๋ฉด ์๋๋ ์ ๊ทผํ ์ ์๋ private ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฆฌํ๋ ์ ์ ๋จ์ฉํ๋ฉด ์บก์ํ ์์น์ด ๊นจ์ง๊ฑฐ๋ ๋ณด์์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
'๐ C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ถ์ ํด๋์ค(Abstract Class), ์ธํฐํ์ด์ค(Interface) (0) | 2024.08.20 |
|---|---|
| ํํ(Tuple), ๋ ์ฝ๋(Record) (0) | 2024.08.19 |
| const, readonly (0) | 2024.08.19 |
| in, out, ref ํค์๋ (0) | 2024.08.19 |
| IComparable, IComparer ์ธํฐํ์ด์ค (0) | 2024.08.19 |