유니티 C# - 리플렉션

김효중·2025년 4월 11일

개요

리플렉션(Reflection)이란?

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}");

장단점

리플렉션은 문자열로 속성에 접근할 수 있지만 속도가 느리다는 단점이 있다.
또한 일반적으로 접근할 수 있는 상황에서 리플렉션은 더 복잡하게 보일 수 있다.

profile
도전하는 개발자

0개의 댓글