[26] 제네릭 인터페이스와 논제네릭 인터페이스를 함께 구현하라

다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.

 

 

제네릭만 사용한다면 좋겠지만 제네릭이 없었던 시절에 개발된 코드들을 지원해야 하는 경우도 생길 것이다.

때문에 라이브러리 개발 시 제네릭뿐만 아니라 논제네릭도 같이 구현한다면 라이브러리 활용도를 좀 더 높일 수 있다.

 

논제네릭을 명시적으로 구현하기

인터페이스 구현 시 메서드 앞에 인터페이스의 이름을 붙여서 명시적으로 구현하는 방법과,

명시없이 public 한정자로 암묵적으로 구현하는 방법이 존재한다.

 

명시적으로 구현된 인터페이스 메서드는 해당 인터페이스의 참조를 통해서만 호출할 수 있다.

 

논제네릭을 명시적으로 구현한다면 암시적으로 구현된 제네릭 메서드가 우선적으로 선택되기 때문에 실수로 논제네릭을 사용하는 일을 방지할 수 있다.

 

컬렉션 인터페이스의 상속관계

IEnumerable<T>가 IEnumerable을 상속받긴 하지만 모든 컬렉션 인터페이스가 상속관계를 가지는 것은 아니다.

 

IEnumerable<T>는 IEnumerable을 상속

ICollection<T>는 ICollection을 상속받지않음

IList<T>는 IList를 상속받지 않음

IList<T>와 ICollection<T>는 IEnumerable<T>를 상속

 

결론

 예전에 개발된 코드와 함께 사용되야한다면 논 제네릭 인터페이스를 구현하라.

 또한 인터페이스를 명시적으로 구현하여 개발자가 실수로 새로운 코드에 논제네릭을 사용하지 않도록 하라.

 

 

 

 

댓글

Designed by JB FACTORY