C#의 foreach 문은 배열의 모든 요소를 인덱스 없이 순차적으로 읽을 수 있는 가장 간결한 반복문입니다. 별도의 카운터 변수나 종료 조건 없이도 컬렉션 전체를 안전하게 순회할 수 있어 코드 가독성이 높아지고 실수도 줄어듭니다.
아래 예제에서는 먼저 for 문으로 정수 배열을 초기화한 뒤, foreach 문을 사용해 각 요소의 값을 출력합니다.
예제
using System;
namespace ArrayApplication {
class MyArray {
static void Main(string[] args) {
int[] n = new int[10]; /* n은 10개의 정수를 담는 배열 */
/* 배열 n의 요소 초기화 */
for (int i = 0; i < 10; i++) {
n[i] = i + 100;
}
/* foreach 문으로 각 배열 요소의 값 출력 */
foreach (int j in n) {
int i = j - 100;
Console.WriteLine("Element[{0}] = {1}", i, j);
}
Console.ReadKey();
}
}
}
실행 결과
Element[0] = 100 Element[1] = 101 Element[2] = 102 Element[3] = 103 Element[4] = 104 Element[5] = 105 Element[6] = 106 Element[7] = 107 Element[8] = 108 Element[9] = 109
foreach 문은 자체적으로 인덱스를 제공하지 않습니다. 그래서 위 예제에서는 요소 값에서 100을 빼는 방식으로 인덱스를 역산해 함께 출력했습니다. 즉, foreach는 요소의 값 자체에 집중하는 반복문이라는 점을 기억하면 좋습니다.
인덱스로 특정 요소에 접근하기
두 번째 요소처럼 특정 위치의 값이 필요하다면 foreach 대신 인덱서([])를 사용하는 것이 좋습니다.
int a = n[1];
배열의 인덱스는 0부터 시작하므로 위 코드는 두 번째 요소인 101을 변수 a에 저장합니다.
참고: foreach와 for 선택 기준
- foreach: 모든 요소를 순서대로 읽기만 할 때 적합합니다. 단, 반복 중에는 배열 요소를 수정할 수 없습니다.
- for: 인덱스가 필요하거나 특정 구간만 순회하거나 요소 값을 변경해야 할 때 적합합니다.