| Activator.CreateInstance 메소드란?
지정한 매개 변수와 가장 일치하는 생성자를 사용하여 지정한 유형의 인스턴스를 만듭니다.
출처 - Microsoft
| 사용 방식
Activator.CreateInstance는 다음과 같은 두 가지 형식으로 사용할 수 있다.
1. Activator.CreateInstance(Type type) : 지정된 타입의 인스턴스를 생성
2. Activator.CreateInstance(Type type, Object[] args) : 지정된 타입의 인스턴스를 생성하고, 인스턴스를 초기화하기 위해 지정된 인자를 사용
1. 사용예시 - 생성자에 매개변수가 없는 경우
public class ActivatorTester : MonoBehaviour
{
private void Awake()
{
RunMethod();
}
public void RunMethod()
{
Type type = typeof(ActivatorTest);
var value = Activator.CreateInstance(type);
}
}
public class ActivatorTest
{
public ActivatorTest()
{
Debug.Log("테스트 완료");
}
}
1. typeof 연산자를 사용하여 ActivatorTest 클래스의 Type 객체를 가져온다.
2. Activator.CreateInstance 메서드를 사용하여 Type 객체에 해당하는 클래스의 인스턴스를 생성한다.
3. 생성자에서 결과값 출력
결과값
2. 사용예시 - 생성자에 매개변수가 있는 경우
public class ActivatorTester : MonoBehaviour
{
private void Awake()
{
RunMethod();
}
public void RunMethod()
{
Type type = typeof(ActivatorTest);
var value = Activator.CreateInstance(type, this, "안녕하세요!");
}
}
public class ActivatorTest
{
public ActivatorTest(ActivatorTester tester, string description)
{
Debug.Log($"{tester}, {description}");
}
}
1. typeof 연산자를 사용하여 ActivatorTest 클래스의 Type 객체를 가져온다.
2. Activator.CreateInstance 메서드를 사용하여 Type 객체에 해당하는 클래스의 인스턴스를 생성한다.
3. 생성자 매개변수에 값들을 전달한다.
4. 생성자에서 받은 인자를 이용하여 동적으로 생성된 인스턴스를 초기화한다.
5. 결과값 출력
결과값
| Activator.CreateInstance 메소드의 장/단점
장점
- 동적 객체 생성 - 런타임에 타입 정보를 기반으로 객체를 생성할 수 있다. 이는 특히 미리 알 수 없는 타입을 사용하는 상황에서 유용하다.
- 인자 전달 - 생성자에 인자를 전달할 수 있다.
- 유연성 - 클래스가 추가되거나 변경될 때 코드를 수정하지 않고도 객체를 생성할 수 있다.
단점
- 성능 - 리플렉션을 사용하여 객체를 생성하므로 일반적인 객체 생성보다 성능이 떨어질 수 있다. 따라서 상황에 맞게 사용해야 한다.
- 에러 - 컴파일러가 객체 생성을 컴파일 타임에 확인할 수 없으므로, 잘못된 타입이나 매개변수가 전달되어 에러가 발생할 수도 있다.
'C# 기초' 카테고리의 다른 글
[C#] 메모리 구조 (0) | 2024.08.09 |
---|---|
[C#] 배열, 리스트, 딕셔너리 (Array, List, Dictionary) (1) | 2023.12.11 |
[C#] delegate(델리게이트)와 event(이벤트) (0) | 2023.11.08 |
[C#] async와 await 키워드 그리고 코루틴(Coroutine)과의 차이 (0) | 2023.10.31 |
[C#][개념] 스레드와 동기/비동기 (0) | 2023.10.31 |