CS/C#

[C#] foreach

Mirab 2021. 12. 5. 21:12

이번에는 foreach문에 대해서 공부해보겠습니다.

foreach 문이 왜 등장했을까요? 기존에 for, while, do~while 문으로 대체가 가능한데..

 

그러다가 어떤 한 블로그의 말을 듣고 납득이 되었습니다.

그 말은 foreach문index범위를 벗어나는 위험성이 없다는 것입니다.

무슨말이냐면, 배열이나 컬렉션의 끝에 도달하면 자동으로 반복이 종료하게 되는데요.

만약에 foreach문을 사용하지 않고 기존에 알고 있었던 for문을 이용해서 구현했더라면 프로그래머의 실수로 인해 할당되지 않은 영역을 참조하는 경우가 발생할 수 있습니다.

이러한 경우가 바로 IndexOutOfRangeException 입니다.

정확히는 해당 범위 외부에 있는 인덱스를 사용해서 배열 또는 컬렉션의 요소에 액세스하려고 할 때 발생하는 오류입니다.

 

가끔 개발을 하다보면 나도 모르게 index범위를 잘못 설정하여 프로그램이 오류로 인해 돌아가지 않는 경우가 빈번합니다.

큰 개발일수록 이러한 작은 실수를 줄이기 위해서 등장한 것이 바로 foreach문입니다.

 

다만 foreach문도 단점이 있습니다.

다른 반복문에 비해 3~4배 정도 느리다고 합니다.

하지만 이러한 문제 때문에 짜잘한 부분에서 퍼포먼스를 줄이는 것보다는 병목현상이 발생하는 부분을 찾아서 개선하는 것이 전체 프로젝트의 퍼포먼스를 올린다는 것을 명심해야 합니다. 게다가 사람은 언제나 실수를 하기 때문이죠.

 

주저리 주저리 설명이 길었는데 이제 foreach문을 어떻게 사용하는지 알아봅시다.

foreach(데이터타입 변수명 in 배열(컬렉션)
{
     // to-do
}

배열 혹은 컬렉션의 요소를 차례대로 순회하면서 in 키워드 앞에 있는 변수에 담아줍니다.

다만 박싱(언박싱) 부분만 주의해서 사용한다면 좋을 것 같습니다.

using System;

class Program
{
    static void Main(string[] args)
    {
        int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };

        foreach(int n in arr)
        {
            Console.WriteLine(n);
        }
    }
}
1
2
3
4
5
6

 

'CS > C#' 카테고리의 다른 글

[C#] 클래스  (0) 2021.12.11
[C#] 문자열 찾기 함수들  (0) 2021.12.10
[C#] var  (0) 2021.12.10
[C#] null 병합 연산자, ??  (0) 2021.12.05
[C#] IsNullOrEmpty  (0) 2021.11.19