foreach 

배열과 컬렉션를 위한 반복문


기본적인 for문


int[] numbers = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

for (int i = 0; i < numbers.Length; i++)

{

    Console.Write(numbers[i] + " ");

}

Console.WriteLine("");


C# 프로그래밍에서 기본적으로 사용되는 배열 반복문은 위의 코드와 같이 for문을 사용한다.. C#의 배열은 기본적으로 배열 안에 있는 요소의 수를 Length 프로퍼티로 알려주기 때문에 C++처럼 for문을 사용하다가 Index Out Of Range Exception이 발생할 가능성은 적다.


List<int> numList = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

for (int i = 0; i < numList.Count; i++)

{

    Console.Write(numbers[i] + " ");

}

Console.WriteLine("");


for문을 이용한 리스트의 순회 역시 배열의 순회와 거의 같은 형태를 취하기 때문에 사용에 큰 어려움은 없다고 느낄 수 있다.


Dictionary<int, int> numDictionary = new Dictionary<int, int>() { { 0, 0 }, { 1, 1 }, { 2, 2 } };

for(var enumerator = numDictionary.GetEnumerator(); enumerator.MoveNext(); )

{

    Console.Write(enumerator.Current.Key + ":" + enumerator.Current.Value + " ");

}

Console.WriteLine("");

 

하지만 for문을 사용해서 딕셔너리를 순회하려고 하면 위의 코드와 같이 열거자를 활용해서 코드를 작성해야하기 때문에 코드가 길어지고 열거자에 대해서 아직 익숙하지 않은 개발자라면 쉽게 사용하기가 어렵다.



foreach문을 사용한 컬렉션 순회


그렇다면 이제 foreach문을 사용한 예시 코드를 보자.


int[] numbers = new int[10] { 01234, 56789 };

foreach(var num in numbers)

{

    Console.Write(num + " ");

}

Console.WriteLine("");


List<int> numList = new List<int>() { 0123456789 };

foreach (var num in numList)

{

    Console.Write(num + " ");

}

Console.WriteLine("");


Dictionary<intint> numDictionary = new Dictionary<intint>() { { 0}, { 11 }, { 22 } };

foreach (var num in numDictionary)

{

    Console.Write(num.Key + ":" + num.Value + " ");

}

Console.WriteLine("");

 

이번에는 배열, 리스트, 딕셔너리의 예시를 한꺼번에 작성했다. foreach문을 사용해서 딕셔너리를 순회하면 열거자를 사용할 때보다 훨씬 코드가 짧아지고 리스트나 배열에서도 조금 더 작성이 편해지는 것을 알 수 있다.


List<int> numList = new List<int>() { 0123456789 };

foreach (var num in numList)

{

    Console.Write(num + " ");

}

Console.WriteLine("");


간단하게 리스트를 순회하는 foreach문을 예시로 들어서 설명해보자면 foreach (var 임시변수 in 순회하고자 하는 컬렉션)으로 매 반복마다 순회하고자 하는 컬렉션의 요소를 받아와서 사용하는 방식이다. foreach는 컬렉션의 순회가 끝나면 자동으로 반복을 중지하기 때문에 Index Out Of Range Exception이 발생할 염려가 없다.



foreach문의 다차원 배열 순회


int[,] array = new int[2, 3]

{

    { 0, 1, 2 },

    { 3, 4, 5 },

};


for (int i = 0; i < 2; i++)

{

    for (int j = 0; j < 3; j++)

    {

        Console.WriteLine(string.Format("multiLayerArray[{0},{1}] :: {2}", i, j, array[i, j]));

    }

}


foreach (var num in array)

{

    Console.WriteLine(num);

}


foreach문을 사용하면 다차원 형태의 배열 역시 순회가 손쉽게 가능하다. for문을 이용해서 다차원 배열을 순회하려면 n차원에 대해서 n중 for문을 구현해야하지만 foreach문을 이용하면 단 하나의 for문으로 다차원 배열의 순회가 가능해진다.


하지만 이것은 각각의 장단점이 명확하게 갈린다. 다차원 배열의 경우, foreach문으로 순회하면 코드가 간단해지는 장점이 있지만, for문을 통한 다차원 배열의 순회처럼 각각의 인덱스에 대한 처리가 어려워진다.



foreach를 활용한 enum 순회


public enum DayOfWeek { Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }


foreach (int dow in Enum.GetValues(typeof(DayOfWeek)))

{

    Console.WriteLine(string.Format("{0}번째 요일", dow));


}


foreach (string dow in Enum.GetNames(typeof(DayOfWeek)))

{

    Console.WriteLine(dow);

}

 

foreach와 Enum 클래스를 이용해서 enum에 대한 순회역시 가능하다.



반응형

+ Recent posts