프로그래밍 C#언어

템플릿(Template)

게임첫걸음 2024. 9. 9. 15:53

 템플릿이란 용어는 C++에서 사용되는 용어이고 C#에서는 Generic이라고 표현합니다. 자료형 변환과 관련된 강력한 기능을 제공하며 다양한 데이터 타입에 대해 재사용 가능한 코드를 작성할 수 있습니다.

 제네릭(Generic)은 클래스, 메서드, 인터페이스 등을 정의할 때 특정 데이터 타입을 일반화하여 코드의 재사용성과 타입 안전성을 높여줍니다. 컴파일 단계에서 타입 검사를 수행하여 런타임에 타입 정보를 안전하게 처리할 수 있습니다. 여기서 컴파일, 런타임을 그림으로 간단히 알려드리겠습니다.

프로그램 작동 단계 그림 예시

 여기서 제네릭(Generic)은 컴파일 단계에서 타입에 대한 검사를 수행하고 런타임에 정보를 안전하게 처리할 수 있도록 수행합니다. 이제 관련 코드를 확인해보겠습니다.

using System.Collections;   //array 사용
using System.Collections.Generic;   //제네릭(템플릿)

class Program
{
    //제네릭 메서드 (함수 템플릿(Function Template))
    //원하는 자료형 변환하는 법.
    //함수 오버로딩은 기능을 바꾸는 것
    //템플릿은 자료형을 바꾸는 기능
    static void PrintType<T, A>(T _t, A _a)  //T는 Template 약자
    {
        Console.WriteLine(_t.GetType());    //Type 출력해주라.
    }

    //static void Sum<T1, T2>(T1 _lhs, T2 _rhs)
    //{
    //    return _lhs + _rhs;
    //}

    //클래스 템플릿, 템플릿 클래스 둘 다 아무거나 부름.
    class Template<T, A>
    {
        public T _t;

        public void CheckType()
        {
            Console.WriteLine(_t.GetType());
        }
    }

    static void Main()
    {
        //템플릿(Template)
        PrintType<int, int>(10, 5);
        PrintType<string, double>("string", 5);
        PrintType<float, decimal>(3.14f, 10);

        Template<int, float> temp = new Template<int, float>();
        temp.CheckType();

        //Collection
        //STL: Standard Template Library
        //Generic Programming(일반화 프로그래밍)
    }
}

 

 제네릭을 사용하기 위해선 아래의 문장이 필요합니다. 

using System.Collections.Generic;

 템플릿에서는 템플릿 클래스, 함수, 인터페이스가 있고, 제네릭에서는 각각 클래스, 메서드, 인터페이스 3가지를 다룰 수 있습니다. 여기서 함수와 메서드는 언어의 차이이며 그림으로 표현하겠습니다. 

함수와 메서드 관계

 이제 제네릭이 사용된 코드들을 상세히 살펴보겠습니다.

class Program
{
    static void PrintType<T, A>(T _t, A _a)  //T는 Template 약자
    {
        Console.WriteLine(_t.GetType());	//Type 출력해주라.
    }

    //제네릭 클래스
    //클래스 템플릿, 템플릿 클래스 둘 다 아무거나 부름.
    class Template<T, A>
    {
        public T _t;

        public void CheckType()
        {
            Console.WriteLine(_t.GetType());
        }
    }
}
  • PrintType<T, A>(T _t, A _a): _t의 Type을 출력하라는 메서드
  • CheckType(): 제네릭 클래스의 class Template<T, A>에 속한 메서드로 T룰 _t로 대체하고 _t의 Type을 출력하라는 메서드
static void Main()
{
    //템플릿(Template)
    PrintType<int, int>(10, 5);
    PrintType<string, double>("string", 5);
    PrintType<float, decimal>(3.14f, 10);

    Template<int, float> temp = new Template<int, float>();
    temp.CheckType();

    //Collection
    //STL: Standard Template Library
    //Generic Programming(일반화 프로그래밍)
}

출력값

System.Int32
System.string
System.Single //C#에서 32비트 부동소수점을 나타내는 데이터 타입으로 float의 키워드입니다.
System.Int32

Single과 같이 64비트 부동소수점의 데이터 타입 Double도 있습니다.

 

'프로그래밍 C#언어' 카테고리의 다른 글

대리자(delegate)  (0) 2024.09.10
컬렉션(Collections)  (0) 2024.09.09
상속3  (0) 2024.09.09
상속2  (5) 2024.09.05
상속 (Inheritance)  (0) 2024.08.30