C# 프로그래밍 6번째 시간 - 반복문

유니티의 여섯걸음, C# 공부시작 29일차

오늘은 반복문 (while문,do~while문,for문,foreach문)에 대해서 배우겠습니다!

반복문 또한 조건문처럼 나중에 코딩할때 많이 쓰는 문장인데,
특정 조건을 만족할 때 까지 계속 반복하여 실행하여 줍니다.
시작해보겠습니다!!

1. while (참일때 동안 반복)

처음은 while문입니다. 형태부터 보겠습니다.

while (조건식) {
 // 반복 실행될 코드 
}

이 조건식은 if문처럼 true 또는 false로 변환되어야 됩니다.
이 특징은 조건식이 참이면 이 반복문 공간 안으로 들어가서 반복하면서 코드를 실행합니다.
만약에 반복하다가 조건식이 거짓이 되면 이 공간 즉, 루프를 빠져나옵니다.
그러나 계속 조건식이 참이라면 루프를 빠져나오지 못하고 계속 반복할 수도 있게 됩니다.

while문을 활용한 예제를 만들어보겠습니다.

[while문을 이용한 예제]

using System; 

namespace Study 
{
	class Program 
	{ 
		static void Main(string[] args) 
		{ 
			int num = 1; 
			while (num <= 10) 
			Console.WriteLine("현재 num: {0}", num++); 	
		}
	}
}

이에 따른 결과는

현재 num: 1 <br>
현재 num: 2 <br>
현재 num: 3 <br>
현재 num: 4 <br>
현재 num: 5 <br>
현재 num: 6 <br>
현재 num: 7 <br>
현재 num: 8 <br>
현재 num: 9 <br>
현재 num: 10 <br>

이 나옵니다.

이 예제는 num이 10보다 커질때까지 반복하는 형식인데, 처음부터 가보겠습니다.

처음에 정수형 변수인 num을 선언하고 1이란 값으로 동시에 초기화하였습니다.
그 뒤에 while문이 등장하면서 num이 10보다 커질때까지 반복합니다.
그 이후 num이 11이 되고, 조건식에서 성립하지 않아 그대로 루프를 빠져나갑니다.
num++은 저번에 배웠던 후위 증가 연산자입니다. num을 출력한 후에 이 값을 1 증가합니다.

왜 출력하고 난 후에 연산을 할까 생각해보면, num의 값을 증가하는 부분을 빼보도록 해보겠습니다.

while (num <= 10) 
    Console.WriteLine("num: {0}", num);

이 형식을 넣어본다면 출력값은 이러합니다.

현재 num: 1 <br>
현재 num: 1 <br>
현재 num: 1 <br>
현재 num: 1 <br>
현재 num: 1 <br>
현재 num: 1 <br>
... <br>

num의 값에 변화가 없어서 그대로 1인 상태에서 끝까지 출력합니다.
이 조건식을 계속 만족하면서 출력하기 때문입니다. 이런 형태로 무한 루프가 만들어집니다.

2. do~while (한번 먼저 실행 후 반복~)

1번의 while문 형태는 조건을 먼저 보고 실행하는데 do~while문은 먼저 코드를 실행한 후, 조건식을 검사합니다.
이 형태를 먼저 보겠습니다.

do {
 // 반복 실행될 코드 
} while (조건식); 

여기서 중요한 것은 while문에 세미콜론(;)이 붙는 것입니다.
do~while문 특징은 조건이 만족하든 안하든 먼저 한번 실행은 한다는 것입니다.
앞의 while문 예제를 do~while문으로 바꿔보겠습니다.

[do~while문으로 변형한 예제]

using System; 

namespace Study
{
	class Program
	{ 
		static void Main(string[] args) 
		{ 
			int num = 1;
			do {
				Console.WriteLine("현재 num: {0}", num++); 
				
			} while (num <= 10); 
		}
	}
}

이에 따른 결과는 이러합니다.

현재 num: 1 <br>
현재 num: 2 <br>
현재 num: 3 <br>
현재 num: 4 <br>
현재 num: 5 <br>
현재 num: 6 <br>
현재 num: 7 <br>
현재 num: 8 <br>
현재 num: 9 <br>
현재 num: 10 <br>

결과를 봤을때는, 맨 처음의 while문 예제와 다른게 없는 것 같지만, 코드에서 쓰는 형식이 조금 달라집니다.
이 코드는 먼저 num의 값인 1을 출력하고 난 후 값을 증가합니다.

아마 프로그램을 만들때 먼저 검사하고 나중에 실행하는 while문 형태말고,
먼저 실행하고 나중에 검사하는 do~while문이 필요할때가 있을 겁니다.

3. for (참이 될 때까지 반복~)

for문은 while문과 같이 특정 조건을 만족할때까지 반복에 쓰입니다.
또한, while문보다 훨씬 쉽고 초기화나 증감 부분이 따로 위치하지도 않습니다.
for문을 본 후, while문과도 비교해보겠습니다.

for(초기식; 조건식; 증감식) {
    // 반복해서 실행될 코드
}
초기식;

while(조건식) {
     // 반복해서 실행될 코드 
     증감식 
}

while문에서 따로따로 있었던 초기식, 증감식을 for문에서는 한번에 합칩니다.
초기식은 반복을 실행하기 전에 반복문에서 사용할 변수를 초기화하는 것을 얘기합니다.
조건식은 반복을 하기 위한 조건을 확인하고, 증감식은 반복문을 빠져나오게 하기 위해 어떤 변수의 값을 감소하거나 증가하는 부분을 말합니다.

앞에서 사용했던 예제를 이번에는 for문으로 다시 구현해보겠습니다.

[for문으로 바꾼 예제]

using System; 

namespace Study
{ 
	class Program 
	{ 
		static void Main(string[] args) 
		{ 
			for (int num = 1; num <= 10; num++) 
			Console.WriteLine("현재 num: {0}", num); 
		}
	}
}

이에 따른 결과는 위의 예제들과 같습니다.

현재 num: 1 <br>
현재 num: 2 <br>
현재 num: 3 <br>
현재 num: 4 <br>
현재 num: 5 <br>
현재 num: 6 <br>
현재 num: 7 <br>
현재 num: 8 <br>
현재 num: 9 <br>
현재 num: 10 <br>

뭔가 앞의 다른 예제들과는 다르게 코드가 간단해보입니다. for문의 실행과정은 이렇습니다.

[초기식 -> 조건식 -> 코드 실행 -> 증감식 -> 조건식 -> 코드 실행 -> 증감식 -> …]
바로 for문에서 모든 것을 넣는데, 초기식에서 num이란 변수 선언 후 1로 초기화합니다.

  1. 초기식은 말 그대로 딱 초기에 한번 쓰는 역할이고, for문 안에서 선언했기 때문에, for문이 끝나면 없어집니다.
  2. 조건식에서는 num이 10보다 작거나 같은지 확인하는 역할을 한 후, 코드 실행으로 넘깁니다.
  3. 증감식은 코드 실행 후, num의 값이 1만큼 증가하고 다시 조건식으로 돌아가게 해줍니다. 그러면 조건식은 다시 num값을 보고 조건에 성립되는지 확인합니다.
    이 과정을 반복하는 것이 for문의 역할입니다. 그리고 조건을 만족하면 for문을 빠져나옵니다.

여기까지가 일반적인 반복문의 종류입니다.
‘for문이 간단하다고 했으니, for문만 계속 사용하면 되지 않나?’라는 의문이 생길 수도 있는데,
쓰는 용도가 다 다르거나, 반복을 하는 방식을 여러 개를 설정한 것이라고 생각이 듭니다.
언젠간 for문만이 아니라 while문, do~while문도 많이 쓸 것이라고 믿습니다.. :)

4. foreach(순회하며 차례대로 접근~)

foreach문을 배우려면 배열과 컬렉션의 개념을 알아야됩니다.
일단 내용을 공부하고 차후에 배열을 배울때 다시 짚어보겠습니다.

우리가 배웠던 변수는 딱 하나만 설정할 수 있었습니다. 예를 들어서, int a = 30;이라고 한다면 a라는 변수에 하나의 숫자만 설정한 것입니다.
배열변수들이 일렬로 되어 있어서 변수 여러개를 설정할 수 있다고 생각하면 됩니다.
이 간단한 개념을 인지하고 foreach문을 다시 보겠습니다.

기본적인 형태는 이러합니다.

foreach (변수 in 배열 혹은 컬렉션) { 
// 실행될 코드 
}

이것을 활용하여 예제를 만들어보겠습니다.

[foreach문을 활용한 예제]

using System; 

namespace Study
{ 
	class Program 
	{ 
		static void Main(string[] args) 
		{ 
			int[] arr = { 1, 2, 5, 7, 4, 9, 8, 10, 4, 7, 11 }; 
			
			foreach (int i in arr) 
			Console.WriteLine("i: {0}", i); 
		}
	}
}

이에 따른 결과는 이러합니다.

i: 1 <br>
i: 2 <br>
i: 5 <br>
i: 7 <br>
i: 4 <br>
i: 9 <br>
i: 8 <br>
i: 10 <br>
i: 4 <br>
i: 7 <br>
i: 11 <br>

배열을 활용하여 변수 i에서 여러가지 숫자를 넣었습니다.
배열 int[]에 담겨있는 각각의 데이터를 콤마를 넣고 돌아가면서 변수 i에 넣는건데, 이들을 ‘요소’ 라고 부릅니다.
foreach문은 이런 배열을 활용해서 굳이 증감식을 쓰지 않고도 각각 출력을 시킬 수 있는 겁니다.
사실 C언어에서는 접했던 내용이 아니라 조금 새롭게 느껴지는 합니다..ㅎㅎ

5. 반복문의 중첩

반복문 또한 if문처럼 중첩을 할 수 있습니다.
for문안에 for문이 있거나 for문안에 while문이 있을 수 있습니다.
상황에 따라서는 여러 번 중첩할 수도 있습니다. 형태는 for문을 여러 번 붙여쓴 형태입니다.

for(...; ...; ...) {
    for(...; ...; ...) {
          ... 
     } 
}

이 for문을 두 번 사용하여 구구단을 출력하는 예제를 만들어보겠습니다.

[중첩 for문을 이용한 예제]

using System; 

namespace Study
{ 
	class Program
	{ 
		static void Main(string[] args) 
		{ 
			for (int a = 2; a < 10; a++) 
			{ 
				for (int b = 1; b < 10; b++) 
				{ 
					Console.WriteLine("{0} * {1} = {2}", a, b, a * b); 
				}
			}
		}
	}
}

이에 따른 결과는

2 * 1 = 2 <br>
2 * 2 = 4 <br>
2 * 3 = 6 <br>
2 * 4 = 8 <br>
2 * 5 = 10 <br>
... <br>
9 * 5 = 45 <br>
9 * 6 = 54 <br>
9 * 7 = 63 <br>
9 * 8 = 72 <br>
9 * 9 = 81 <br>

이런 형태로 우리가 흔히 보던 구구단이 나옵니다.

신기한 것은 여기서 for문을 딱 두번만 사용했는데 반복을 72번을 하여 많은 구구단을 한번에 출력하였습니다.
이 중첩은 우리가 프로그램을 만들때 간단하게 해줄 수도 있습니다.

마무리하며

오늘은 반복문에 대해서 배웠습니다.
다음 시간에는 반복문에 있던 무한루프를 좀 더 자세하게 다뤄보면서, 이 루프를 빠져나가거나 이동할 수 있는 과정을 배워보겠습니다!!

Categories:

Updated:

Comments