C#에서 2차원 배열의 모든 요소를 효율적으로 순회하려면 GetUpperBound 메서드와 중첩 for 루프를 활용하는 것이 가장 일반적인 방법입니다. 이 글에서는 단계별로 2차원 배열을 선언하고, 값을 설정한 뒤, 전체 요소를 출력하는 과정을 살펴보겠습니다.
1. 2차원 배열 선언하기
먼저 문자열 타입의 3x3 크기 2차원 배열을 다음과 같이 선언합니다.
string[] array = new string[3, 3];
2. 배열에 요소 값 설정하기
행과 열 인덱스를 지정하여 각 요소에 값을 할당할 수 있습니다.
array[0, 0] = "One"; array[0, 1] = "Two"; array[0, 2] = "Three"; array[1, 0] = "Four"; array[1, 1] = "Five"; array[1, 2] = "Six"; array[2, 0] = "Seven"; array[2, 1] = "Eight"; array[2, 2] = "Nine";
3. 상한(Upper Bound) 구하기
배열을 순회하려면 각 차원의 크기를 알아야 합니다. GetUpperBound() 메서드는 특정 차원의 마지막 인덱스를 반환하므로, 이를 활용하면 루프 범위를 정확하게 설정할 수 있습니다.
int uBound0 = array.GetUpperBound(0); // 첫 번째 차원의 최대 인덱스 int uBound1 = array.GetUpperBound(1); // 두 번째 차원의 최대 인덱스
4. 중첩 루프로 배열 순회하기
바깥쪽 for 루프가 행을, 안쪽 for 루프가 열을 담당하도록 중첩 루프를 작성하면 배열의 모든 요소에 순서대로 접근할 수 있습니다.
전체 예제 코드
using System;
using System.Collections.Generic;
using System.Linq;
public class Demo {
public static void Main() {
string[] array = new string[3, 3];
array[0, 0] = "One";
array[0, 1] = "Two";
array[0, 2] = "Three";
array[1, 0] = "Four";
array[1, 1] = "Five";
array[1, 2] = "Six";
array[2, 0] = "Seven";
array[2, 1] = "Eight";
array[2, 2] = "Nine";
// 각 차원의 상한 인덱스 가져오기
int uBound0 = array.GetUpperBound(0);
int uBound1 = array.GetUpperBound(1);
// 중첩 루프를 사용해 배열 순회
for (int i = 0; i <= uBound0; i++) {
for (int j = 0; j <= uBound1; j++) {
string res = array[i, j];
Console.WriteLine(res);
}
}
Console.ReadLine();
}
}실행 결과
One Two Three Four Five Six Seven Eight Nine
마무리
이처럼 GetUpperBound 메서드로 각 차원의 최대 인덱스를 구한 후 중첩 for 루프를 돌리면, 배열의 실제 크기와 무관하게 안전하게 2차원 배열 전체를 순회할 수 있습니다. 배열 크기가 하드코딩되지 않으므로 유지보수 측면에서도 유리하며, 다차원 배열을 다루는 다양한 상황에서 응용할 수 있는 기본 패턴입니다.