다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
제네릭만 사용한다면 좋겠지만 제네릭이 없었던 시절에 개발된 코드들을 지원해야 하는 경우도 생길 것이다.
때문에 라이브러리 개발 시 제네릭뿐만 아니라 논제네릭도 같이 구현한다면 라이브러리 활용도를 좀 더 높일 수 있다.
논제네릭을 명시적으로 구현하기
인터페이스 구현 시 메서드 앞에 인터페이스의 이름을 붙여서 명시적으로 구현하는 방법과,
명시없이 public 한정자로 암묵적으로 구현하는 방법이 존재한다.
명시적으로 구현된 인터페이스 메서드는 해당 인터페이스의 참조를 통해서만 호출할 수 있다.
논제네릭을 명시적으로 구현한다면 암시적으로 구현된 제네릭 메서드가 우선적으로 선택되기 때문에 실수로 논제네릭을 사용하는 일을 방지할 수 있다.
컬렉션 인터페이스의 상속관계
IEnumerable<T>가 IEnumerable을 상속받긴 하지만 모든 컬렉션 인터페이스가 상속관계를 가지는 것은 아니다.
IEnumerable<T>는 IEnumerable을 상속
ICollection<T>는 ICollection을 상속받지않음
IList<T>는 IList를 상속받지 않음
IList<T>와 ICollection<T>는 IEnumerable<T>를 상속
결론
예전에 개발된 코드와 함께 사용되야한다면 논 제네릭 인터페이스를 구현하라.
또한 인터페이스를 명시적으로 구현하여 개발자가 실수로 새로운 코드에 논제네릭을 사용하지 않도록 하라.
'🌍 C# Study > 이펙티브 C#' 카테고리의 다른 글
[28] 확장 메서드를 이용하여 구체화된 제네릭 타입을 개선하라 (0) | 2021.04.28 |
---|---|
[27] 인터페이스는 간략히 정의하고 기능의 확장은 확장 메서드를 사용하라 (0) | 2021.04.28 |
[25] 타입 매개변수로 인스턴스 필드를 만들 필요가 없다면 제네릭 메서드를 정의하라 (0) | 2021.04.27 |
[24] 베이스 클래스나 인터페이스에 대해서 제네릭을 특화하지 말라 (0) | 2021.04.27 |
[23] 타입 매개변수에 대해 메서드 제약 조건을 설정하려면 델리게이트를 활용하라 (0) | 2021.04.27 |