Foreach 문
Foreach 는 컬렉션 (배열, 리스트, 테이블 등)을 반복(iterate) 할 때 사용하는 반복문입니다.
사용법
foreach (var item in 컬렉션)
{
// item을 이용한 처리
}
예제1: 문자열 리스트 반복
List<string> fruits = new List<string> { "사과", "바나나", "딸기" };
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
결과 : 사과
바나나
딸기
예제2: DataTable의 행 반복
DataTable table = new DataTable();
table.Columns.Add("Name");
table.Rows.Add("김희선");
table.Rows.Add("김사랑");
foreach (DataRow row in table.Rows)
{
Console.WriteLine(row["Name"]);
}
결과 : 김희선
김사랑
※ 왜 foreach 를 쓰나요?
가독성 ↑ | 코드를 더 깔끔하게 쓸 수 있음 |
실수 ↓ | 인덱스를 직접 다루지 않아서 오류 줄임 |
컬렉션 전용 | 리스트, 배열, DataTable 등 반복에 적합한 구조에 사용 가능 |
반복 방식 | 항목을 하나씩 순회 | 인덱스를 사용해 순회 |
수정 가능 | 컬렉션 값은 읽기 전용 | 자유롭게 수정 가능 |
가독성 | 더 좋음 | 조금 복잡할 수 있음 |
foreach | 컬렉션(배열, 리스트 등)을 순차적으로 반복 |
장점 | 간단하고 안정적, 인덱스 오류 없음 |
제한 | 컬렉션 내용을 직접 수정할 수는 없음 (읽기 전용 순회) |
foreach 안에서 특정 조건일 때만 처리하거나, break, continue 사용법
※ 조건문과 함께 쓰기 (if)
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
foreach (int num in numbers)
{
if (num % 2 == 0) // 짝수일 때만 출력
{
Console.WriteLine(num);
}
}
결과 : 2
4
※ continue 사용하기
→ 조건을 건너뛰고 다음 항목으로 이동할 때 사용
foreach (int num in numbers)
{
if (num < 3)
continue; // 3보다 작으면 그냥 넘김
Console.WriteLine(num);
}
결과 : 3
4
5
※ break 사용하기
→ 조건을 만족하면 반복 자체를 끝냅니다.
foreach (int num in numbers)
{
if (num == 4)
break; // 4가 나오면 반복 중지
Console.WriteLine(num);
}
결과 : 1
2
3
※ 실전 예 : DataTable 에서 특정 값만 찾기
foreach (DataRow row in table.Rows)
{
if (row["Name"].ToString() == "김희선")
{
Console.WriteLine("김희선 찾음!");
break;
}
}
※ 요약
if | 특정 조건만 처리 |
continue | 현재 항목 건너뛰고 다음으로 이동 |
break | 반복문 즉시 종료 |
※ foreach 안에서 데이터 수정 가능할까?
사실 foreach 자체 안에서는 컬렉션의 구조(추가/삭제)는 못 바꾸지만,
데이터 자체는 수정할 수 있답니다~
특히 DataTable, List, 배열 등에서는 항목의 값을 바꾸는 건 가능합니다.
예제: DataTable의 행 반복
foreach (DataRow row in table.Rows)
{
if (row["Name"].ToString() == "김희선")
{
row["Name"] = "김희애"; // 값 수정 가능!
}
}
🔹 DataRow는 참조 타입이라, 내부 값을 자유롭게 수정할 수 있습니다.
※ List<T> 의 항목 수정
List<int> numbers = new List<int> { 1, 2, 3 };
// 이건 값만 복사되므로 numbers 리스트 자체는 안 바뀜!
foreach (int num in numbers)
{
int modified = num * 2;
Console.WriteLine(modified); // 출력만 바뀜
}
// 이렇게는 수정 가능!
for (int i = 0; i < numbers.Count; i++)
{
if (numbers[i] < 3)
numbers[i] *= 10;
}
※LINQ 로 조건 필터링하기
LINQ는 컬렉션을 SQL처럼 쉽게 필터링할 수 있게 해주는 기능입니다.
예제 : 특정 이름만 찾기
var hong = table.AsEnumerable()
.Where(row => row["Name"].ToString().Contains("홍"))
.ToList();
foreach (var row in hong)
{
Console.WriteLine(row["Name"]);
}
예제 : List에서 짝수만 가져오기
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var even = numbers.Where(n => n % 2 == 0);
foreach (var n in even)
{
Console.WriteLine(n); // 2, 4
}
※ LINQ 한눈에 보기
Where | 조건 필터링 |
Select | 항목을 변형 |
OrderBy, OrderByDescending | 정렬 |
First, FirstOrDefault | 첫 항목 가져오기 |
ToList() | 결과를 리스트로 변환 |
※ 요약
foreach 안에서 수정 | DataRow, 배열 등은 값 수정 가능하지만 구조 변경은 불가 |
List<T>는 for문으로 수정 추천 | |
LINQ | 필터링, 조회, 정렬 등에 아주 유용함 |
=> 기호
- 정식 명칭: 람다 연산자(lambda operator)
- 읽는 방법: "이렇게 매핑된다 또는 매핑하라" 또는 "이렇게 동작한다 또는 동작하라" 라고 이해하면 됩니다.
※ 기본구조
(매개변수) => { 실행 코드 }
또는, 코드가 한 줄이면 중괄호 없이 이렇게도 씁니다:
(매개변수) => 결과
예제 1 : List에서 짝수만 가져오기
Func<int, int, int> add = (a, b) => a + b;
Console.WriteLine(add(3, 4)); // 결과
- 여기서 (a, b)는 입력
- =>는 람다 연산자
- a + b는 결과
예제 2 : LINQ와 함께 사용
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var even = numbers.Where(n => n % 2 == 0);
foreach (var n in even)
Console.WriteLine(n); // 결과: 2, 4
n => n % 2 == 0
==> "n을 받아서, n이 짝수인지 확인한다"는 의미
※ LINQ 와 사용하는 이유
코드 간결 | 메서드를 따로 정의하지 않고, 바로 간단하게 쓸 수 있음 |
LINQ와 찰떡궁합 | Where, Select, OrderBy 등과 자주 사용됨 |
재사용 가능 | Func, Action으로 함수처럼 저장 가능 |
※ 요약
=> | 람다 연산자: "입력 → 결과" 표현 |
쓰임 | LINQ, 간단한 함수 표현 등 |
장점 | 코드 간단, 깔끔, 실무에서도 자주 사용 |
Func<int, int, int> add 이건 어떤 형식(타입)을 말하는 걸까요?
※ 의미
두 개의 int 값을 받아서, 하나의 int 값을 반환하는 함수입니다.
Func<입력1타입, 입력2타입, 반환타입>
Func<int, int, int> add = (a, b) => a + b;
int result = add(3, 4); // 결과 7
예제 : 더 쉬운 예제들
Func<string> | 매개변수 없음 → string 반환 |
Func<int, string> | int 하나 받고 → string 반환 |
Func<int, int, bool> | int 2개 받고 → bool 반환 |
Func<int, bool> isEven = n => n % 2 == 0;
Console.WriteLine(isEven(4)); 결과 true
※ 참고
- Func는 "무언가를 반환"하는 함수
- Action은 "반환값이 없는 함수" (즉, void)
Action<string> print = msg => Console.WriteLine(msg);
print("감사합니다.");
※ 요약정리
Func<int, int, int> | int 2개 입력 → int 반환하는 함수 형식 |
add | 해당 함수(람다 식)를 담는 변수 이름 |
장점 | 메서드 선언 없이, 함수를 변수처럼 만들고 전달 가능 |
개발에 많은 도움 되시길 바래요~^^

'IT' 카테고리의 다른 글
C# SWICH 문 예제 (0) | 2025.04.02 |
---|---|
C# 델리게이트 이벤트핸들러 사용 예제 (0) | 2025.03.28 |
C# 델리게이트 이해 및 예제 (0) | 2025.03.28 |
C# Clone() 함수 사용법과 예제 (0) | 2025.03.25 |
C# Func 사용법 예제 (0) | 2025.03.25 |