이 글은 직접 학습하거나 구현하며 남긴 개인 기술 기록입니다. 참고 자료가 있는 경우 본문에 출처를 남기고, 틀린 부분을 발견하면 수정합니다.
Comparer vs Comparable and Enumerable vs Enumerator in C#
1. Comparer and Comparable
1.1 Comparer (IComparer)
- 정의:
IComparer는 두 객체를 비교하는 외부 비교자 인터페이스입니다. - 주요 역할: 정렬 기준을 별도의 클래스로 구현해 객체의 정렬을 수행합니다.
- 핵심 메서드:
int Compare(object x, object y)를 구현하여 두 객체의 크기 비교를 수행합니다. - 장점: 여러 가지 정렬 기준을 적용할 수 있습니다.
사용 예제:
class PointCompare : IComparer<Point>
{
public int Compare(Point x, Point y)
{
return x.X - y.X; // X 좌표 기준 비교
}
}
1.2 Comparable (IComparable)
- 정의:
IComparable은 클래스 내부에 비교 기준을 구현하는 내부 비교자 인터페이스입니다. - 주요 역할: 객체가 스스로 정렬 기준을 정의하며,
CompareTo메서드를 통해 비교 로직을 제공합니다. - 핵심 메서드:
int CompareTo(object other)를 구현하여 객체 자신과 다른 객체를 비교합니다. - 장점: 객체 자체가 비교 가능한 상태가 됩니다.
사용 예제:
class Point : IComparable<Point>
{
public int X { get; set; }
public int CompareTo(Point other)
{
return this.X - other.X; // X 좌표 기준 비교
}
}
1.3 비교 요약
| 구분 | Comparer (IComparer) | Comparable (IComparable) |
|——————|——————————–|———————————|
| 비교자 | 외부 비교자 | 내부 비교자 |
| 정렬 기준 | 여러 정렬 기준 구현 가능 | 하나의 정렬 기준만 구현 |
| 사용 메서드 | Compare | CompareTo |
| 객체의 역할 | 객체는 비교 로직을 몰라도 됨 | 객체 스스로 비교 기준 정의 |
2. Enumerable and Enumerator
2.1 Enumerable (IEnumerable)
- 정의:
IEnumerable은 컬렉션이 순회 가능하도록 하는 인터페이스입니다. - 주요 역할: 열거자(Enumerator)를 제공하여
foreach구문에서 컬렉션을 순회할 수 있도록 합니다. - 핵심 메서드:
IEnumerator GetEnumerator()를 구현합니다.
사용 예제:
class MyCollection : IEnumerable
{
private int[] data = { 1, 2, 3 };
public IEnumerator GetEnumerator()
{
return data.GetEnumerator();
}
}
2.2 Enumerator (IEnumerator)
- 정의:
IEnumerator는 컬렉션의 요소를 순회하는 객체입니다. - 주요 역할: 컬렉션 내 요소를 하나씩 탐색하며 현재 위치를 관리합니다.
- 핵심 메서드:
MoveNext(): 다음 요소로 이동합니다.Current: 현재 요소를 반환합니다.Reset(): 처음으로 돌아갑니다.
사용 예제:
IEnumerator enumerator = myCollection.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
2.3 비교 요약
| 구분 | Enumerable (IEnumerable) | Enumerator (IEnumerator) |
|——————|——————————–|——————————–|
| 역할 | 컬렉션이 순회 가능함을 나타냄 | 컬렉션의 요소를 하나씩 순회 |
| 제공 메서드 | GetEnumerator() | MoveNext(), Current |
| 사용 시점 | foreach 시작 시 호출 | foreach 내부에서 요소 접근 |
| 관계 | 열거자를 반환하는 역할 | 실제 순회를 수행하는 객체 |
결론
- Comparer는 외부에서 비교를 수행하며, 여러 기준을 설정할 수 있습니다.
- Comparable은 객체 내부에서 비교 기준을 정의하여 객체 자체를 비교 가능하게 만듭니다.
- Enumerable은 컬렉션이 순회 가능함을 나타내며, Enumerator를 반환합니다.
- Enumerator는 컬렉션을 실제로 순회하는 객체로,
MoveNext,Current,Reset을 통해 순회를 제어합니다.
댓글이 보이지 않으면 GitHub에 로그인한 뒤 새로고침해 주세요. 공개 댓글은 로그인 상태에서 더 안정적으로 표시됩니다.