C#의 제네릭은 타입을 특정하지 않고 데이터 타입 패러미터를 받아서 원하는 방식으로 처리를 해주는 방식이다.
ex) public static void test <T>(T left, T right) where T ~ 이렇게 생긴 친구들. T가 데이터 타입 패러미터라고 할수 있다.
- 주로 컬렉션과 함께 사용해야 유용하다고 하는 의견들이 많다고 한다. 하지만, 인터페이스, 이벤트 핸들러, 공통 알고리즘에도 유용하다.
- 제네릭 방식 -> 장점: 코드 짧아진다, 데이터가 준다, 박싱, 언박싱을 피할수 있다. 단점: 메모리 풋프린트가 많이 든다.
(서로 다른 타입이 제네릭을 이용해 선언된다면, 서로 다른 머신 코드가 계속 파생되기 때문)
List<int> s, List<string> d.. => 제네릭이 아닐 경우 하나의 머신코드 but, 제네릭일 경우 서로 다른 머신 코드
그러니, 남용하기 보다 필요한 경우에만 쓰는 것이 바람직하다.
필요한 제약만 설정
-클래스가 작업을 올바르게 수행하기 위해서 타입 매개변수의 유형을 제한해준다.
-내가 생각하는 방식을 사용자에게 알려줄수 있다.
-런타임에서 타입 체크를 해준다라고 한다면, 제네릭 제약으로 체크 방식을 바꾸면, 런타임 체크에서 컴파일 체크로 바뀌게 된다. 즉, 런타임에서 더 효율적으로 돌아가게 된다.
-무조건, 필요한 조건에서만 제약 조건을 걸어줘야한다. 왜일까?
+) new T() 보다 default(T)로 대체할수 있는 경우, 그렇게 해준다. (타입의 초깃값이 필요한 경우)
'Programming > C#' 카테고리의 다른 글
Effective C# - 제네릭의 활용) 타입 매겨변수가 IDispoable을 구현할 경우를 대비해 제네릭을 만든다. (0) | 2022.09.11 |
---|---|
Effective C# - 제네릭의 활용) 런타임에 타입을 확인하여 최적의 알고리즘을 사용하자. (0) | 2022.09.11 |
Effective C# - 캐스트보다 is, as를 사용하자 (0) | 2022.08.29 |
C# - 프로퍼티(Property) (0) | 2022.07.24 |
C#- 비동기 프로그래밍(2) with 예제 (0) | 2022.06.12 |