foreach 루프란?
C#의 foreach 루프는 배열이나 컬렉션에 포함된 각 요소를 처음부터 끝까지 순서대로 반복 처리할 때 사용하는 가장 간결하고 직관적인 구문입니다. 인덱스 변수를 별도로 선언하거나 증감 조건을 관리할 필요가 없기 때문에 코드가 깔끔해지고, 배열 범위를 벗어나는 오류(out of range)를 예방할 수 있다는 장점이 있습니다.
그럼 실제 예제를 통해 C# 배열에서 foreach 루프를 사용하는 방법을 살펴보겠습니다.
예제 1: 문자열 배열 순회 및 조건 검사
using System;
public class Demo {
public static void Main() {
string[] products = new string[] { "Electronics", "Accessories", "Clothing", "Toys", "Clothing", "Furniture" };
Console.WriteLine("상품 목록...");
foreach(string s in products) {
Console.WriteLine(s);
}
Console.WriteLine("배열에 Accessories 상품이 존재합니까? = {0}", Array.Exists(products, ele => ele == "Accessories"));
Console.WriteLine("배열에 Stationery 상품이 존재합니까? = {0}", Array.Exists(products, ele => ele == "Stationery"));
Console.WriteLine("\n'C'로 시작하는 상품이 하나 이상 존재합니까? = {0}", Array.Exists(products, ele => ele.StartsWith("C")));
Console.WriteLine("'D'로 시작하는 상품이 하나 이상 존재합니까? = {0}", Array.Exists(products, ele => ele.StartsWith("D")));
Console.WriteLine("'T'로 시작하는 상품이 하나 이상 존재합니까? = {0}", Array.Exists(products, ele => ele.StartsWith("T")));
Console.WriteLine("'E'로 시작하는 상품이 하나 이상 존재합니까? = {0}", Array.Exists(products, ele => ele.StartsWith("E")));
Console.WriteLine("배열의 크기가 고정되어 있습니까? = " + products.IsFixedSize);
}
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
상품 목록... Electronics Accessories Clothing Toys Clothing Furniture 배열에 Accessories 상품이 존재합니까? = True 배열에 Stationery 상품이 존재합니까? = False 'C'로 시작하는 상품이 하나 이상 존재합니까? = True 'D'로 시작하는 상품이 하나 이상 존재합니까? = False 'T'로 시작하는 상품이 하나 이상 존재합니까? = True 'E'로 시작하는 상품이 하나 이상 존재합니까? = True 배열의 크기가 고정되어 있습니까? = True
코드 설명
Array.Exists() 메서드는 람다 식으로 전달한 조건을 만족하는 요소가 배열 안에 하나라도 존재하면 true, 그렇지 않으면 false를 반환합니다. 예를 들어 'C'로 시작하는 요소(Clothing)가 있으므로 true가 출력되고, 'D'로 시작하는 요소는 없으므로 false가 출력됩니다.
또한 IsFixedSize 속성은 해당 배열의 크기가 고정되어 있는지 여부를 알려줍니다. C#에서 기본적으로 생성되는 배열은 항상 고정 크기를 가지므로 true가 출력되는 것입니다.
예제 2: 두 개의 문자열 배열 비교하기
이번에는 foreach 루프로 두 개의 문자열 배열을 각각 순회하고, 두 배열 객체를 비교하는 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main() {
String[] strArr1 = new String[3] { "John", "Jacob", "Tim"};
String[] strArr2 = new String[3] { "Tom","Brad","Bradley"};
Console.WriteLine("첫 번째 문자열 배열...");
foreach(string val in strArr1) {
Console.WriteLine(val);
}
Console.WriteLine("두 번째 문자열 배열...");
foreach(string val in strArr2) {
Console.WriteLine(val);
}
Console.WriteLine("두 배열 객체가 동일합니까? = " + strArr1.Equals(strArr2));
}
}실행 결과
첫 번째 문자열 배열... John Jacob Tim 두 번째 문자열 배열... Tom Brad Bradley 두 배열 객체가 동일합니까? = False
코드 설명
Equals() 메서드는 두 배열이 같은 객체(참조)인지를 확인합니다. 위 예제의 strArr1과 strArr2는 서로 다른 객체이므로 false가 반환됩니다. 참고로 배열의 내용 자체가 같은지 비교하려면 LINQ의 SequenceEqual() 메서드를 사용하는 것이 올바른 방법입니다.