for 문
은 루프 안에 있는 문장들을 반복적으로 실행할 때 사용한다.
for 루프는 일반적으로 카운터 변수를 이용해 일정 범위 동안 for 루프 안의 블럭을 실행한다.
class Program
{
static void Main(string[] args)
{
// for 루프
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Loop {0}", i);
}
}
}
0부터 9까지 총 10번 콘솔 출력을 반복하는 코드
foreach 문
은 배열이나 컬렉션에 주로 사용하는데,
컬렉션의 각 요소를 하나씩 꺼내와서 foreach 루프 내의 블럭을 실행할 때 사용된다.
static void Main(string[] args)
{
string[] array = new string[] { "AB", "CD", "EF" };
// foreach 루프
foreach (string s in array)
{
Console.WriteLine(s);
}
}
문자열 배열을 foreach를 사용하여 각 문자열 요소를 하나씩 출력하는 코드
for
가 경우에 따라 약간 빠를 수 있지만
대부분의 경우 성능적 차이는 크지 않으며, foreach
는 for
보다 훨신 간결한 코드를 제공한다는 장점이 있다.
특히, 루프에서 가장 많이 사용되는 C# 배열(array)의 경우,
foreach가 내부적인 최적화를 거쳐 for 루프와 동일한 성능이므로
더 간결한 foreach를 사용할 것을 권장한다.
예를 들어, 2차배열, 3차배열 등의 다중 배열을 처리할 경우,
static void Main(string[] args)
{
// 3차배열 선언
string[,,] arr = new string[,,] {
{ {"1", "2"}, {"11","22"} },
{ {"3", "4"}, {"33", "44"} }
};
//for 루프 : 3번 루프를 만들어 돌림
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
for (int k = 0; k < arr.GetLength(2); k++)
{
Debug.WriteLine(arr[i, j, k]);
}
}
}
//foreach 루프 : 한번에 3차배열 모두 처리
foreach (var s in arr)
{
Debug.WriteLine(s);
}
}
while 문
은 while 조건식이 true인 동안 계속 while 블럭을 실행할 때 사용한다.
static void Main(string[] args)
{
int i=1;
// while 루프
while (i <= 10)
{
Console.WriteLine(i);
i++;
}
}
while문을 사용하여 1부터 10까지 숫자를 콘솔에 출력하는 코드
i
가 11이 되면 while 조건식이false
가 되어 while 루프를 빠져나오게 된다.
do ~ while
은 위의 while문
과 거의 비슷하나,
마지막 while 조건식까지 가기 전에 do ~ while 사이의 블럭을 미리 한번 실행한다는 점에서 차이가 있다
static void Main(string[] args)
{
int i=1;
// do ~ while 루프
do
{
Console.WriteLine(i);
i++;
} while (i < 10);
}
아래 예제는 콘솔로부터 Q키가 입력되지 전까지 계속 키 입력을 받아들인 후, 그동안 입력된 키들을 foreach 루프를 써서 출력해 본 예이다.
using System;
using System.Collections.Generic;
namespace MySystem
{
class Program
{
static void Main(string[] args)
{
List<char> keyList = new List<char>();
ConsoleKeyInfo key;
do
{
key = Console.ReadKey();
keyList.Add(key.KeyChar);
} while (key.Key != ConsoleKey.Q); // Q가 아니면 계속
Console.WriteLine();
foreach (char ch in keyList) // 리스트 루프
{
Console.Write(ch);
}
}
}
}