foreach문은 배열이나 컬렉션에 대한 반복문을 작성할 때 사용한다.
foreach (자료형 변수 in 배열 또는 컬렉션)
{
// 배열 또는 컬렉션의 모든 요소에 대해 반복적으로 실행되는 코드
}
string[] inventory = { "검", "방패", "활", "화살", "물약" };
foreach (string item in inventory)
{
Console.WriteLine(item);
// 검, 방패, 활, 화살, 물약 순서대로 출력된다.
}
컬렉션은 자료를 모아 놓은 데이터 구조를 의미한다.
List<int> numbers = new List<int>(); // 빈 int형 리스트 생성
numbers.Add(1); // 리스트에 데이터 추가
numbers.Add(2);
numbers.Add(3);
numbers.Remove(2); // 리스트에서 데이터 삭제
foreach(int number in numbers) // 리스트 데이터 출력
{
Console.WriteLine(number);
// 1, 3 출력
// 2는 삭제
}
using System.Collections.Generic; // using문 추가
Dictionary<string, int> scores = new Dictionary<string, int>(); // 빈 (키: string 값: int) 딕셔너리 생성
scores.Add("Alice", 100); // 딕셔너리에 데이터 추가
scores.Add("Bob", 80);
scores.Add("Charlie", 90);
scores.Remove("Bob"); // 딕셔너리에서 데이터 삭제
foreach(KeyValuePair<string, int> pair in scores) // 딕셔너리 데이터 출력
{
Console.WriteLine(pair.Key + ": " + pair.Value);
// Alice: 100, Charlie: 90 출력
// Bob: 80은 삭제
}
Stack<int> stack1 = new Stack<int>(); // int형 Stack 선언
// Stack에 요소 추가
stack1.Push(1);
stack1.Push(2);
stack1.Push(3);
// Stack에서 요소 가져오기
int value = stack1.Pop(); // value = 3 (마지막에 추가된 요소)
Queue<int> queue1 = new Queue<int>(); // int형 Queue 선언
// Queue에 요소 추가
queue1.Enqueue(1);
queue1.Enqueue(2);
queue1.Enqueue(3);
// Queue에서 요소 가져오기
int value = queue1.Dequeue(); // value = 1 (가장 먼저 추가된 요소)
배열과 리스트의 가장 큰 차이점은 리스트는 동적으로 크기를 조정할 수 있어 유연한 데이터 구조를 구현할 수 있다는 것이다.
그렇다고 해서 리스트를 무분별하게 사용하는 것은 좋지 않은 습관이다.
이러한 이유들로, 데이터의 크기와 사용 목적을 고려하여 배열과 리스트 중 적절한 것을 선택해야 한다.