[C#] IComparable

C# 2023. 5. 18. 13:33

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() 등의 메서드를 사용하여 오브젝트를 쉽게 정렬할 수 있습니다.

블로그 이미지

RIsN

,