ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Foreach의 특징 및 사용법.
    개발노하우/others. 2009. 7. 4. 10:41

    선 간단한 foreach문의 사용예를 봅시다~

    string[] arr = new string[]{"A","B","C","D"};


    foreach(string i in arr){

    Console.Writeline(i.Tostring());

    }

    매우 간단하죠.....이것을 일반적인 for문으로 돌린다면

    string[] arr = new string[]{"A","B","C","D"};

    for(int i=0;i<arr.length;i++){


    Console.Writeline(arr[i].Tostring());

    }

    이런식이 되겠죠?^^

     

    foreach 구문의 특징

    1) .NET framework 1.0에서 foreach 구문은 IEnumarator 기반으로 순회를 하였기 때문에 boxing과 unboxing을 유발하여 좋지 않은 성능을 보여줬습니다.


    2) 하지만 버전 1.1부터는 배열에 한해서 배열의 타입을 미리 알 수 있으므로 루프 2와 같은 코드를 생성해냅니다.(그럼 결국 foreach가 가장 빠르다기 보단 루프 2와 같다라고 하는게 맞아 보이는군요.)


    3) 배열의 인덱스가 0부터 시작하지 않을 경우에도 올바른 순회를 보장합니다.
    foreach 구문은 배열의 최소 및 최대 범위를 알고 있기 때문에 프로그래머는 이를 신경쓸 필요가 없게 됩니다.


    4) foreach로 순회하는 collection은 읽기전용으로 개체를 변경할 수 없습니다.


    5) 또한 다차원배열의 경우에도 사용할 수 있으므로 for구문(차원 별로 중첩loop 구현)을 사용할 때 보다 적은 코드로 순회를 할 수 있습니다.


    6) 이후 collection의 타입이 변경되어도 foreach 구문을 변경할 필요가 없습니다. 처음에 int[] 배열이었던 foo객체가 이후 필요에 의해 ArrayList로 변경되어도 말이죠.


    7) IEnumerable 인터페이스를 구현한 collection의 경우 자동으로 IDisposable 인터페이스 구현 여부를 체크해 GetEnumerator()가 반환하는 IEnumerator 객체에 대한 finally 구문을 최적화하는 코드를 만들어낸다. (using 블록 사용과 같은 효과)

     

    결론

    collection에 대한 순회를 수행할 때는 다른 루프 구문을 사용하지 말고 항상 foreach를 사용하자.

     

Designed by Tistory.