Generic, where

Clean·2025년 3월 26일

Generic

  • 제네릭(Generic)은 데이터 형식을 일반화하여,
    여러 타입에 대해 유연하고 재사용 가능한 코드를 작성할 수 있게 해준다.

문법

// 함수
static void Swap<T>(ref T left, ref T right)
{
    T temp = left;
    left = right;
    right = temp;
}

// 호출
int a = 1;
int b = 2;
Swap(ref a, ref b); // <T> 생략가능

특징

  • T는 타입 매개변수(Type Parameter)로, 컴파일 시 실제 타입으로 대체된다.

  • 박싱, 언박싱을 거치지 않고 형식을 조정할 수 있어 성능이 향상된다.

  • object 형식을 사용할 때보다 간결하고, 직관적인 코드 작성이 가능하다.

  • 오버로딩과 달리, 제네릭은 하나의 함수만으로 여러 타입에 대해 재사용이 가능하다.

  • Generic 함수는 연산자 지원 타입인지 알 수 없으므로 연산을 허용하지 않는다.


where (타입 제약 조건)

  • Generic은 어떤 타입이 들어올지 모르기 때문에,
    where을 통해 필요한 멤버(함수, 프로퍼티 등)를 안전하게 접근할 수 있다.

문법

public static void GenericTest<T1, T2>(T1 value1, T2 value2)
    where T1 : class    // 참조 타입만 허용
    where T2 : struct   // 값 타입만 허용
{
    // T1은 class 상속받은 타입만 가능
    // T2는 struct 상속받은 타입만 가능
}

특징

  • where 키워드를 사용하면, Generic 타입의 멤버(함수, 프로퍼티 등)에 안전하게 접근할 수 있다.

  • 형식 안정성과 가독성을 높이고, 불필요한 형변환이나 예외를 방지할 수 있다

  • 여러개의 제약 조건을 동시에 걸 수 있다 ex) class + new()


0개의 댓글