C#/데이터다루기

[C#] 제네릭(Generic)

도도돋치 2025. 5. 26. 21:20
Contents 접기
728x90

제네릭이란?

여러 타입에 대해 재사용 가능한 코드를 작성하는 문법

즉, 자료형을 미리 정하지 않고 나중에 정할 수 있는 방법이다. 특히 풀링 시스템 같은 데서 쓰인다.

public class Box<T>
{
    public T item;
}
  • Box<int>, Box<string> 등 어떤 타입이든 활용 가능하다.
  • T는 타입 매개변수로, 나중에 실제 타입으로 바뀜

 

📝 예시

Box<int> intBox = new Box<int>();
intBox.item = 10;

Box<string> strBox = new Box<string>();
strBox.item = "hello";

 

 

제약 조건 (where)

특정 타입만 사용하도록 조건을 걸 수 있다

 

// T는 반드시 클래스여야 함
public class Storage<T> where T : class

// T는 MonoBehaviour이면서 IPoolable 인터페이스를 구현해야 함
public class ObjectPool<T> where T : MonoBehaviour, IPoolable

// T는 매개변수 없는 생성자가 필요함
public class Factory<T> where T : new()

 

풀링 시스템 구현 시, 제약 조건을 걸면 오류 방지 + 타입 안전성 확보가 가능하다.

 

 

메서드에도 제네릭 사용 가능

public void PrintItem<T>(T item)
{
    Debug.Log(item.ToString());
}

 

호출예시:

PrintItem<int>(123);
PrintItem<string>("hello");

 

 

 Unity에서 자주 쓰는 제네릭

구조 설명
List<T> 다양한 타입의 리스트 처리
GetComponent<T>() 원하는 타입의 컴포넌트 가져오기
Instantiate<T>() 프리팹을 타입 안전하게 생성
ObjectPool<T> 풀링 시스템에 제네릭 적용 가능

 

 

📖 요약

기능 설명
T 타입 파라미터 (보통 T, U, V 등)
where 타입 제약 조건 지정
new() 매개변수 없는 생성자 필요
class, struct 참조형 / 값형 제한
재사용성 코드 중복 없이 다양한 타입 대응 가능

 

728x90

'C# > 데이터다루기' 카테고리의 다른 글

[C#] C#에서 new()만 써도 된다?  (0) 2025.05.20
[C#] 열거형(enum)  (0) 2025.04.24
[C#] 문자열 처리 기능 및 메서드  (0) 2025.04.14
[C#] 리터럴(literal)  (0) 2025.04.14
[C#] Escape Sequence  (0) 2025.04.14