템플릿을 직접적으로 지원하는 언어
(“template”라는 이름을 공식적으로 사용)
- C++ — 대표적으로 템플릿을 언어 차원에서 지원
- D 언어(Dlang) — 템플릿 기반 메타프로그래밍 강력 지원
- Rust — 제네릭 + 트레이트 기반이지만 C++ 템플릿과 유사한 메타프로그래밍 가능
- Go(Go 1.18+) — 제네릭 도입, 템플릿과 유사한 기능 제공
- Nim — 템플릿과 매크로 기능을 모두 제공
- Zig — 컴시간(comptime) 기반 제네릭/템플릿 기능 제공
- Haxe — 템플릿 메타프로그래밍 가능
제네릭을 중심으로 템플릿과 유사 기능을 제공하는 언어
(템플릿이라는 명칭을 쓰지 않더라도 사실상 동일한 목적을 수행)
- Java — 제네릭 기반
- C# / .NET 언어들 — 제네릭 기반
- Swift — 제네릭 + 프로토콜 기반
- Kotlin — 제네릭 기반
- TypeScript — 제네릭 기반, 매우 강력한 타입 레벨 프로그래밍 지원
- Scala — 제네릭 + 고급 타입 시스템
- Haskell — 타입클래스 기반, 제네릭/템플릿보다 더 강력한 타입 기능
- OCaml / F# — 파라메트릭 폴리모피즘 기반
- Python(3.5+) — 타입 힌트 제네릭 지원
- Ruby — 정식 제네릭은 없지만 템플릿 메서드 패턴 구현 가능
- PHP(8.1+) — 제네릭 유사 기능 제공
템플릿 엔진을 통해 ‘코드 생성용 템플릿’을 지원하는 언어
(언어 자체의 템플릿 문법이 아닌 템플릿 엔진 기반)
- C, Objective-C, JavaScript, Python, Java 등 대부분의 언어는
Jinja2, Mustache, Handlebars, Mako 등 템플릿 엔진을 사용해 코드 생성 가능
============================================================================================
1. 제네릭 MonoBehaviour로 공통 기능 만들기
여러 타입에 공통 기능을 적용하고 싶을 때 제네릭 컴포넌트를 만들 수 있습니다.
예시: Singleton<T> 템플릿
사용 예
이렇게 하면 GameManager, AudioManager, UIManager 등 여러 매니저를 한 번의 템플릿 코드로 재사용할 수 있습니다.
2. 제네릭 컬렉션 또는 데이터 구조 사용
Unity에서 아이템 시스템, 풀링 시스템 등 확장성 있는 시스템을 만들 때 자주 사용됩니다.
예시: 제네릭 Object Pool 템플릿
이 템플릿을 쓰면 어떤 오브젝트 타입이든 풀링 시스템에 적용 가능:
3. 제네릭 ScriptableObject 템플릿
ScriptableObject를 템플릿화하면 아이템, 스탯, 설정 등 다양한 데이터 타입을 유연하게 다룰 수 있습니다.
예시
사용 예
- DataContainer<int> → 플레이어 체력 수치
- DataContainer<string> → 아이템 설명
- DataContainer<Vector3> → 스폰 위치
4. 커스텀 에디터 + 제네릭으로 유연한 에디터 확장
UnityEditor 관련 코드를 제네릭으로 작성해 여러 타입의 인스펙터를 손쉽게 재사용할 수 있습니다.
5. UnityEvent<T> 활용
UnityEvent도 템플릿 기반입니다.
여기서 UnityEvent<float>는 내부적으로 템플릿(제네릭) 구조를 사용합니다.
요약
Unity에서 템플릿(제네릭) 사용 예는 다음과 같습니다.
| 공통 로직 재사용 | Singleton<T>, Manager 템플릿 |
| 데이터 관리 | ScriptableObject<T>, DataContainer |
| 풀링 시스템 | ObjectPool<T> |
| 에디터 확장 | BaseInspector<T> |
| 이벤트 | UnityEvent<T> |



















