C#의 리플렉션(Reflection)은 코드가 실행 중일 때, 타입 정보(클래스, 필드, 메서드 등)를 조회하거나 조작할 수 있는 기능이다
간단하게 말하면 객체의 타입의 정보를 문자열로 통해 받을 수 있다.
변수명.속성으로 평소에 접근했다면 리플렉션은 "변수이름"으로 접근한다.
사전에 클래스를 구조를 알아보거나 객체의 일부 속성이 반복될 때 사용한다.
다음과 같이 Player 클래스가 있다고 가정한다.
public class Player
{
public string name = "홍길동";
public int hp = 100;
public void Heal(int amount)
{
hp += amount;
}
}
평소에는 Player.name, Player.Heal(10)과 같이 사용하지만 리플렉션은 다음과 같이 사용한다.
Player player = new Player();
// 1. 타입 정보
Type type = typeof(Player);
// 2. 필드 정보
FieldInfo fieldInfo = type.GetField("name");
// 3. 값 가져오기
string currentName = (string)fieldInfo.GetValue(player);
Debug.Log($"이름: {currentName}");
// 4. 값 변경
fieldInfo.SetValue(player, "이순신");
Debug.Log($"새 이름: {player.name}");
리플렉션은 문자열로 속성에 접근할 수 있지만 속도가 느리다는 단점이 있다.
또한 일반적으로 접근할 수 있는 상황에서 리플렉션은 더 복잡하게 보일 수 있다.