IRONSOFTWAREHOME
개발자 업데이트

인덱스와 함께 사용한 C# foreach (개발자를 위한 작동 방식)

제이콥 멜러, 팀 아이언 최고기술책임자
Jacob Mellor
Updated: 2026년 4월 21일

C#에서 foreach 문은 일반적으로 배열, 리스트 또는 기타 열거 가능한 유형과 같은 컬렉션을 반복하는 데에 사용됩니다. 그러나 foreach 루프의 한 가지 제한 사항은 현재 반복을 추적하는 내장 인덱스 변수를 제공하지 않는다는 것입니다. 개발자는 종종 현재 요소의 인덱스에 접근해야 합니다. 아래에는 이러한 기능을 구현하는 다양한 방법과 IronPDF 라이브러리를 탐색할 것입니다.

foreach 루프의 기본 사항

foreach 루프는 IEnumerable을 구현하는 배열, 리스트, 사전 및 기타 유형을 통해 반복을 단순화하도록 설계되었습니다. 정수 데이터 유형의 배열을 반복하는 foreach 문을 사용하는 기본 예제는 다음과 같습니다:

int[] numbers = { 10, 20, 30, 40 };
foreach (int number in numbers)
{
    Console.WriteLine(number);
}

이 예제에서는, number 가 각 반복 동안 컬렉션의 요소를 나타냅니다. 루프는 배열의 모든 요소를 자동으로 반복합니다. 그러나 현재 요소의 인덱스에 접근할 수 있는 내장 방법은 없습니다.

foreach 루프에서 인덱스 처리하기

C#은 foreach 루프에서 직접적으로 인덱스를 제공하지 않지만, 이를 해결할 수 있는 여러 가지 기술이 있습니다. 이 방법들을 자세히 논의해 봅시다.

방법 1: 별도의 변수 사용하기

현재 요소의 인덱스를 얻는 가장 간단한 방법 중 하나는 외부 인덱스 변수를 사용하는 것입니다. 루프 안에서 수동으로 이를 증가시켜야 합니다:

int[] numbers = { 10, 20, 30, 40 };
int numberIndex = 0;
foreach (int number in numbers)
{
    Console.WriteLine($"Index: {numberIndex}, Value: {number}");
    numberIndex++;
}

이 코드에서는 루프가 시작하기 전에 인덱스 변수를 초기화하고 각 반복 동안 루프 안에서 이를 증가시킵니다. 이 접근 방식은 작동하지만, 인덱스를 수동으로 유지해야 하므로 항상 이상적이지는 않습니다.

방법 2: LINQ의 Select 메서드 사용하기

LINQ의 Select 메서드는 컬렉션의 각 요소를 인덱스를 포함하여 새로운 형태로 프로젝션할 수 있습니다. 다음은 예시입니다.

int[] numbers = { 10, 20, 30, 40 };
foreach (var item in numbers.Select((value, index) => new { value, index }))
{
    Console.WriteLine($"Index: {item.index}, Value: {item.value}");
}

이 예제에서는, Select 이 현재 요소의 값과 인덱스를 모두 포함하는 익명 객체를 생성합니다. foreach 루프는 그런 다음 이러한 개체를 반복하고 인덱스와 값을 직접 액세스할 수 있습니다.

방법 3: 사용자 지정 반복기 사용하기

사용자 정의 반복기 확장 메서드를 yield return 키워드를 사용하여 구현하면 현재 요소와 인덱스를 모두 수익하는 메서드를 생성할 수 있습니다. 이는 조금 더 고급 기술이지만 유연한 솔루션을 제공합니다.

public static IEnumerable<(int index, T value)> WithIndex<t>(this IEnumerable<t> source)
{
    int index = 0;
    foreach (T value in source)
    {
        yield return (index, value);
        index++;
    }
}

이제 이 확장 메서드를 컬렉션과 함께 사용할 수 있습니다:

int[] numbers = { 10, 20, 30, 40 };
foreach (var (index, value) in numbers.WithIndex())
{
    Console.WriteLine($"Index: {index}, Value: {value}");
}

이 접근 방식은 수동 인덱스 관리를 재사용 가능한 메서드로 추상화하여 인덱스 문제와 함께 foreach를 더 우아하게 해결합니다.

인덱스에 접근하기 위한 while 루프 사용하기

배열이나 리스트와 같은 컬렉션을 다루고 있다면 인덱스 변수와 함께 while 루프를 사용하여 인덱스와 현재 요소에 모두 접근할 수 있습니다:

int[] numbers = { 10, 20, 30, 40 };
int index = 0;
while (index < numbers.Length)
{
    Console.WriteLine($"Index: {index}, Value: {numbers[index]}");
    index++;
}

C# 인덱스를 사용하는 foreach (개발자를 위한 작동 방식): 그림 1 - 인덱스 출력

이 방법은 인덱스 변수를 배열이나 리스트의 첨자로 사용하여 인덱스와 현재 요소에 직접 액세스할 수 있습니다.

.NET에서 사용자 지정 컬렉션 및 반복기

사용자 지정 컬렉션을 사용하는 경우 인덱스에 액세스를 지원하기 위해 반복기를 구현할 수 있습니다. IEnumerable 인터페이스를 구현하고 yield return 문을 사용하여 요소와 인덱스를 모두 반환하는 반복기를 생성할 수 있습니다.

IEnumerable을 구현하는 사용자 지정 컬렉션을 만드는 예는 다음과 같습니다:

public class CustomCollection<t> : IEnumerable<t>
{
    private T[] _items;
    public CustomCollection(T[] items)
    {
        _items = items;
    }
    public IEnumerator<t> GetEnumerator()
    {
        for (int i = 0; i < _items.Length; i++)
        {
            yield return _items[i];
        }
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

그러면 이 사용자 지정 컬렉션을 foreach 루프에서 사용할 수 있습니다:

var customCollection = new CustomCollection<int>(new int[] { 10, 20, 30, 40 });
foreach (int number in customCollection)
{
    Console.WriteLine(number);
}

GetEnumerator 메서드를 구현하고 yield return 를 사용하여 .NET의 다른 컬렉션처럼 사용자 정의 컬렉션에서 foreach 루프가 작동할 수 있는 반복기를 생성합니다.

키-값 쌍을 사용하여 사전을 반복하기

사전을 사용할 때 foreach 루프는 직접 키-값 쌍을 반복할 수 있습니다. 이는 각 반복 동안 키와 값을 모두 액세스하는 일반적인 사용 사례입니다:

Dictionary<int, string> dict = new Dictionary<int, string>
{
    { 1, "Apple" },
    { 2, "Banana" },
    { 3, "Cherry" }
};
foreach (var kvp in dict)
{
    Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}

이 예제에서는 kvp.Key 가 현재 키를 제공하고 kvp.Value 가 현재 값을 제공합니다.

IronPDF를 C#의 foreach 루프 및 인덱스와 함께 사용하기

C# 인덱스를 사용하는 foreach (개발자를 위한 작동 방식): 그림 2 - IronPDF

IronPDF는 C#에서 HTML로 PDF 생성을 처리하고 PDF 관련 작업을 수행하는 PDF 라이브러리입니다. 최신 .NET Framework와도 호환됩니다. IronPDF를 사용하여 PDF를 생성할 때 데이터 컬렉션을 계속 반복하여 PDF 파일에 콘텐츠를 동적으로 삽입해야 할 수 있습니다. 인덱스 처리와 함께 foreach 루프를 결합하면 현재 요소의 인덱스에 따라 위치 지정, 번호 매기기 또는 사용자 지정 논리를 관리할 수 있습니다. 컬렉션의 각 항목이 인덱스와 함께 문서에 삽입되는 IronPDF를 사용하여 PDF를 생성하는 실용적인 예는 다음과 같습니다.

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        // Create a new PDF document renderer
        var pdf = new ChromePdfRenderer();
        
        // Sample data array
        string[] items = { "First Item", "Second Item", "Third Item" };
        
        // Initialize the HTML content with foreach loop and index
        string htmlContent = "<html><body>";
        int index = 0;
        foreach (var item in items)
        {
            htmlContent += $"<h2>Item {index + 1}: {item}</h2>";
            index++;
        }
        htmlContent += "</body></html>";
        
        // Render the HTML to PDF
        var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);
        
        // Save the PDF document
        pdfDocument.SaveAs("output.pdf");
        
        // Notify completion
        Console.WriteLine("PDF created successfully with indexed items.");
    }
}

여기 출력된 PDF 파일이 있습니다:

C# 인덱스를 사용하는 foreach (개발자를 위한 작동 방식): 그림 3 - PDF 출력

결론

C#에서는 foreach 루프가 컬렉션을 반복하기에 편리한 방법이지만, 인덱싱에 대한 기본 지원이 부족합니다. 그러나 이러한 제한을 극복 할 수 있는 몇 가지 방법이 있습니다. 간단한 인덱스 변수, LINQ의 Select 메서드 또는 사용자 정의 반복기를 사용하든 간에 반복 중 현재 또는 다음 요소의 인덱스에 액세스할 수 있습니다. 이러한 기술을 이해하면 특히 각 요소의 인덱스를 알아야 할 때 foreach 루프를 더 효율적으로 사용할 수 있습니다.

IronPDF와 함께라면 즉시 커밋할 필요가 없습니다. 소프트웨어의 기능을 깊이 탐색할 수 있는 무료 체험판을 제공합니다. 보시기에 마음에 드신다면, 라이선스는 $999에서 시작합니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.