안녕하세요 오늘은 C#에서의 yield
키워드와 Enumerator
에 대해 설명해 보도록 하겠습니다. 사용 예제와 함께 보시면 이해하시는데 수월할 것 같습니다.
C#의 yield와 Enumerator의 역할
C#은 .NET 프레임워크의 주요 프로그래밍 언어 중 하나로, 다양한 기능을 제공합니다. 특히, yield
키워드와 Enumerator
는 컬렉션의 요소를 순회하고 반환하는 과정을 간소화하고 효율적으로 만드는 데 큰 도움을 줍니다.
yield 키워드의 개념
yield
키워드는 C#에서 반복자(Iterator)를 구현할 때 사용됩니다. 이를 사용하면 컬렉션의 각 요소를 하나씩 반환할 수 있으며, 복잡한 로직 없이도 사용자 정의 반복 작업을 쉽게 구현할 수 있습니다.
yield의 사용 방식
- yield return: 컬렉션의 다음 요소를 반환합니다.
- yield break: 반복을 중단하고 반복자를 종료합니다.
Enumerator의 역할
Enumerator
는 컬렉션을 순회하는 객체입니다. IEnumerable
인터페이스를 구현하는 모든 컬렉션은 Enumerator
를 통해 순회될 수 있습니다. Enumerator
는 컬렉션의 현재 요소에 액세스하고, 다음 요소로 이동하는 메커드를 제공합니다.
Enumerator 사용 예제
1 2 3 4 5 6 7 | List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; IEnumerator<int> enumerator = numbers.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current); } |
List
컬렉션을 순회하며 각 요소를 출력합니다.
yield와 Enumerator를 활용한 사용자 정의 반복자
yield
키워드를 사용하여 사용자 정의 반복자를 만들면, 복잡한 로직을 단순화할 수 있습니다. 이를 통해 개발자는 컬렉션의 내부 구조에 대해 걱정할 필요 없이 요소를 순차적으로 반환할 수 있습니다.
사용자 정의 반복자 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public IEnumerable<int> GetEvenNumbers(int max) { for (int i = 0; i <= max; i++) { if (i % 2 == 0) { yield return i; } } } foreach (int number in GetEvenNumbers(10)) { Console.WriteLine(number); } |
이 예제는 짝수만 반환하는 사용자 정의 반복자를 구현합니다.
yield와 Enumerator의 장점
yield
와 Enumerator
의 사용은 코드의 가독성을 높이고, 메모리 사용을 최적화합니다. 또한, 복잡한 컬렉션을 다룰 때 개발자가 직접 반복 로직을 작성하는 수고를 덜어줍니다.
- 가독성 향상: 간결하고 이해하기 쉬운 반복 로직을 작성할 수 있습니다.
- 메모리 최적화: 요소가 필요할 때만 생성되므로 메모리 사용이 최적화됩니다.
- 유연성 제공: 다양한 컬렉션 타입에 적용할 수 있는 일관된 접근 방식을 제공합니다.
C# 프로그래밍에서 yield
와 Enumerator
는 컬렉션과 반복자 패턴을 더 효율적으로 다루는 데 핵심적인 역할을 합니다. 효과적으로 활용하셔서, 보다 효율적이고 간결한 코드를 작성할 수 있기를 바라겠습니다. 감사합니다.