더북(TheBook)

형식 매개변수에 대한 제약조건

제네릭 클래스를 만들 때 형식 매개변수에 제약조건을 줄 수 있습니다. 클래스를 선언할 때 where 키워드를 사용하여 T가 구조체인지 클래스인지를 결정할 수 있습니다.

이번에는 형식 매개변수에 대한 제약조건을 사용해 보겠습니다. 다음 내용을 C# 인터렉티브에서 단계별로 실행해 보세요. 프로젝트 기반 소스는 TypeConstraint.cs 파일에 있습니다.

 

1.   wherestruct 키워드로 형식 매개변수 T에 값 형식만 받는 제네릭 클래스를 만들 수 있습니다. 참조 형식이 들어오면 다음과 같이 컴파일 에러가 발생합니다.

> public class CarValue<T> where T : struct { } //값 형식만
> CarValue<int> c = new CarValue<int>();        //struct 성공
> CarValue<string> c = new CarValue<string>();
(1,18): error CS0453: The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'CarValue<T>'
(1,35): error CS0453: The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'CarValue<T>'

2.   class 제약 조건을 부여하면 참조 형식만 받는 제네릭 클래스를 생성할 수 있습니다. 마찬가지로 값 형식이 들어오면 컴파일 에러가 발생합니다.

> public class CarReference<T> where T : class { }      //참조 형식만
> CarReference<string> cs = new CarReference<string>(); //class 성공
> CarReference<decimal> cs = new CarReference<decimal>();
(1,23): error CS0452: The type 'decimal' must be a reference type in order to use it as parameter 'T' in the generic type or method 'CarReference<T>'
(1,45): error CS0452: The type 'decimal' must be a reference type in order to use it as parameter 'T' in the generic type or method 'CarReference<T>'
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.