방프리
21.03.28 Chapter3. 제네릭 활용 (Item 25) 본문
Item 25 : 타입 매개변수로 인스턴스 필드를 만들 필요가 없다면 제네릭 메서드를 정의하라
저자는 제네릭을 사용할수록 개발자가 점점 실수를 할 수 있는 부분에 대해 염려한 것 같다.
이번 주제는 한마디로 줄이자면 편함을 버리자는 것이다.
아무 생각 없이 제네릭 클래스를 만드는 습관의 위험성인데 제네릭 클래스를 관리하다보면
제약조건이 점점 늘어날 수 있는데 그럴 경우마다 수정의 범위가 넓어진다.
public static class Utils
{
public static T Max<T>(T left, T right) =>
Comparer<T>.Default.Compare(left, right) < 0 ? right : left;
public static double Max(double left, double right) =>
Math.Max(left, right);
public static T Min<T>(T left, T right) =>
Comparer<T>.Default.Compare(left, right) < 0 ? left : right;
public static double Min<T>(double left, double right) =>
Math.Min(left, right);
}
제네릭 클래스 대신 제네릭 메서드를 통해서 타입별로 구현하는 것이 앞으로의 사용에 좀 더 최적화가 될 뿐만 아니라
작업량이 더 줄어들게 된다. (제네릭 클래스로 구현 시 사용할 때마다 타입을 지정해야함)
하지만 다음의 경우에는 제네릭 메서드보다는 제네릭 클래스를 구현하는 것이 더 장점일 때가 있다.
- 클래스에 타입 매개변수로 주어진 타입으로 내부 상태를 유지 (컬렉션이 예시)
- 제네릭 인터페이스를 구현하는 클래스를 만들어야 할 경우
자신이 구현해야하는 제품의 조건을 잘 고려하여 선택하자.
'C# > Effective C#' 카테고리의 다른 글
21.03.30 Chapter3. 제네릭 활용 (Item 27) (0) | 2021.03.30 |
---|---|
21.03.30 Chapter3. 제네릭 활용 (Item 26) (0) | 2021.03.30 |
21.03.27 Chapter3. 제네릭 활용 (Item 24) (0) | 2021.03.27 |
21.03.14 Chapter3. 제네릭 활용 (Item 23) (0) | 2021.03.14 |
21.03.07 Chapter3. 제네릭 활용 (Item 22) (0) | 2021.03.07 |