방프리
20.10.26 Chapter3. 제네릭 활용 (Item 20) 본문
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은 객체의 서로가 어떻게 다른지에 대한 간단한 정의이다. ==와 같은 동등함을 알기 위해서는
따로 구현해야한다고 작가는 명시하였다. 덧붙여서 선후 관계의 비교와 동등함의 내용은 전혀 다른 문제이기 때문에
구현 인터페이스 또한 달라야 한다고 한다.
'C# > Effective C#' 카테고리의 다른 글
21.03.07 Chapter3. 제네릭 활용 (Item 22) (0) | 2021.03.07 |
---|---|
21.02.07 Chapter3. 제네릭 활용 (Item 21) (0) | 2021.02.07 |
20.10.22 Chapter3. 제네릭 활용 (Item 19) (0) | 2020.10.22 |
20.07.17 Chapter3. 제네릭 활용 (Item 18) (0) | 2020.07.17 |
20.07.11 Chapter2. .Net 리소스 관리 (Item 17) (0) | 2020.07.11 |
Comments