C# 언어에서 IComparable 인터페이스는 오브젝트 간의 일반적인 정렬 순서를 제공하는 메서드를 정의합니다. 이 인터페이스를 사용하면 객체를 정렬할 수 있는 능력을 추가로 제공할 수 있습니다. 이는 배열 또는 리스트의 정렬 메서드와 같이, 순서가 필요한 상황에서 유용합니다.
IComparable 인터페이스는 단일 메서드 CompareTo를 정의하며, 이 메서드는 현재 인스턴스와 비교 대상이 되는 오브젝트를 매개변수로 받아들입니다.
public interface IComparable {
int CompareTo(object obj);
}
CompareTo 메서드는 다음과 같이 동작합니다:
만약 현재 인스턴스가 매개변수로 제공된 오브젝트보다 "작을" 경우, 이 메서드는 음의 정수를 반환합니다.
만약 현재 인스턴스가 매개변수로 제공된 오브젝트와 "같을" 경우, 이 메서드는 0을 반환합니다.
만약 현재 인스턴스가 매개변수로 제공된 오브젝트보다 "클" 경우, 이 메서드는 양의 정수를 반환합니다.
따라서, IComparable을 구현하는 클래스를 작성할 때는 CompareTo 메서드를 통해 두 객체를 어떻게 비교할지 정의해야 합니다.
아래 예시는 Person 클래스가 IComparable 인터페이스를 구현하는 방법을 보여줍니다:
public class Person : IComparable {
public string Name { get; set; }
public int CompareTo(object obj) {
if (obj == null) return 1;
Person otherPerson = obj as Person;
if (otherPerson != null) return this.Name.CompareTo(otherPerson.Name);
else throw new ArgumentException("Object is not a Person");
}
}
위 코드에서 Person 클래스의 CompareTo 메서드는 먼저 대상 오브젝트가 null인지 확인하고, 그 다음 대상 오브젝트가 Person 타입인지 확인합니다. 만약 대상 오브젝트가 Person이라면, 이 메서드는 string 타입의 Name 프로퍼티를 비교하여 결과를 반환합니다.
IComparable 인터페이스를 구현하면 Array.Sort()나 List.Sort() 등의 메서드를 사용하여 오브젝트를 쉽게 정렬할 수 있습니다.
'C#' 카테고리의 다른 글
조건부 컴파일(Conditional Compilation)이란? (0) | 2023.08.28 |
---|---|
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘 (0) | 2023.05.19 |
[VSCode: Error] Mac OS에서 FSharp Path 에러 생길 때 (0) | 2023.05.09 |
미로 생성 알고리즘 (0) | 2023.02.07 |
Javascript의 getInt16()를 C#으로 Convert (0) | 2022.12.20 |