방프리

20.10.26 Chapter3. 제네릭 활용 (Item 20) 본문

C#/Effective C#

20.10.26 Chapter3. 제네릭 활용 (Item 20)

방프리 2020. 10. 26. 22:14

Item 20: IComparable<T>와 IComparer<T>를 이용하여 객체의 선후 관계를 정의하라

 

앞에서의 Enumerable과 같이 인터페이스를 통해 Compare를 구현할 수 있다. 이 IComparable는 CompareTo()라는

메서드 하나만을 정의하고 있는데 이 함수는 C 라이브러리의 strcmp 함수의 구현방식을 그대로 따르고 있다.

.NET 환경에서 최신 API들은 IComparable<T>를 사용하지만, .Net Framework 2.0이하에서는 object 타입을 받는

IComparable을 사용하고 있기 때문에 두 가지를 같이 구현해주어야 한다.

하지만 위의 코드는 object 타입을 받기 때문에 연산량이 굉장히 많아진다. (박싱과 언박싱)

위의 코드에서는 선후 관계를 명시된 타입으로 재정의하여 정렬할 수 있도록 한 것 뿐만 아니라, 

Customer 클래스에서도 재정의 할 수 있도록 한다. 

object 객체로 받기도 하기 때문에 명시적으로 해주어야 함을 반드시 알고 있어야 한다.

Comparable은 객체의 서로가 어떻게 다른지에 대한 간단한 정의이다. ==와 같은 동등함을 알기 위해서는 

따로 구현해야한다고 작가는 명시하였다. 덧붙여서 선후 관계의 비교와 동등함의 내용은 전혀 다른 문제이기 때문에

구현 인터페이스 또한 달라야 한다고 한다.

Comments