본문 바로가기

.NET

[C#] 반복문 - for, foreach 사용법

프로그래밍 언어에서 반복문이라고 하면 대표적으로 while문과 for문이 있다.

while, for문 자체의 문법은 대부분 비슷하거나 같지만 요즘에는 각 언어마다 더 효율적인 for문을 하나씩 가지고있다.

C#에서는 foreach문이며 대부분의 상황에서 for문보다 편하기 때문에 이번에 정리한다.

 

for 문

가장 사용빈도가 높고 대표적인 반복문으로서 문법은 거의 모든 언어에서 같다.

 

<문법>

for(선언;조건;증감) {

}

 

선언 - 선언부에서는 반복에 사용될 변수를 선언해준다.

조건 - for문은 조건부가 true 일 경우에만 반복되기 때문에 원하는 횟수만큼 동작하게 조건을 걸어준다.

증감 - 사실상 조건문 만으로는 for문을 완전히 동작시킬 수 없다. 증감식에서 선언된 변수를 알맞게 증감시켜준다.

 

<예제>

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

for(int i=0;i<arr.Length;i++) {
	Console.WriteLine("{0}", arr[i]);
}

1부터 한줄씩 10까지 출력하는 예제이다.

int형 arr를 순회할 것이므로 i를 통해 인덱스에 접근하고자 i를 첫번째 인덱스인 0으로 초기화해준다.

i를 arr의 크기보다 작은경우, 즉 arr의 마지막 인덱스까지 순회하고 i++ 증감식을 통해 1씩 증가시킨다.

 

foreach 문

요즘은 각 언어마다 향상된 for문을 통해 반복 가능한 자료형의 순회를 쉽게 할 수 있도록 도와준다.

C#에서의 향상된 for문은 foreach문 이다.

 

<예제>

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

foreach(int value in arr) {
	Console.WriteLine("{0}", value);
}

위의 for문과 완벽히 일치하는 예제이다. 괄호안의 식이 훨씬 단순해진 것을 알 수 있다.

하나의 요소로서 value를 선언해주었고 in 뒤에는 순회할 자료형을 쓴다. 

대표적으로 배열이나 List, ArrayList 등을 많이 사용하게 된다.

 

위 예제처럼 아주 간단하다면 편리함을 크게 못느낄수도 있지만 배열의 요소를 많이 사용한다면

arr[i] 처럼 사용하는 것보다는 foreach에서 처럼 사용하는 것이 직관적이며 도움이 될 수 있다.

 

※ foreach문에서 index 사용하는 방법

foreach문은 위와 같이 굉장히 효율적인것 같아 보이지만 index를 사용할 수 없다는 치명적인 단점이 있다.

하지만 foreach문을 약간 변형하면 index를 사용할 수 있다고 한다.

 

foreach (var item in arr.Select((value, index) => new { Value = value, Index = index })) {
    // item.Value
    // item.Index
}

이처럼 변형을 해주면 foreach문에서도 index를 사용할 수 있다.

또한 item.Value, item.Index와 같이 명명된 이름이 굉장히 직관적이다. 하지만 모두 나처럼 생각할 듯..

이렇게 복잡하면 굳이 foreach를 쓸 필요가 있나.. 이쯤되면 for문이 더 편한 것 같다.

 

앞으로 index를 사용할 일이 있으면 그냥 for문을 써야겠다.