Post

[C#] Lec 03 - 분기문

[C#] Lec 03 - 분기문

분기문

  • 분기문은 프로그램의 흐름을 조건에 따라 여러 갈래로 나누는 흐름제어 구문
  • C#에서는 if문과 switch문 2가지의 분기문을 제공함.

if 문

  • if 문은 한번에 단 하나의 조건을 평가
  • if 문에서 사용하는 조건식은 true or false의 bool 형식이어야 함.
  • else (그렇지 않으면) 이용
  • elif : else if 이용

예시

1
2
3
4
if (조건식)
{
	codes;
}

case 문

  • 여러 가지 조건이 한번에 존재하는 경우 효과적 흐름제어를 위해 switch문을 사용
  • switch 문의 조건식은 정수 형식과 문자열 형식 2가지만 지원
  • 주로 열거형 (enum)과 함께 사용됨.
  • case 뒤에는 정수, 열거형만 가능하지만, dotnet의 업데이트로 실수형도 가능.
  • string을 case 뒤에 넣고 싶다면 “asdf” 형태로 작성해야함.
1
2
3
4
5
6
7
8
9
switch (조건식)
{
	case const1:
		code1;
		break;
	case const2:
		code2;
		break;
}

예시 (enum과 함께 사용한 경우)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
namespace Program
{
	enum Rank { A=100, B=90, C=80, D=70}
	static void Main(string[] args) 
	{
		Rank John = Rank.A;
		switch(John)
		{
			case Rank.A:
			{
				Console.WriteLine("Aclass");
				break;
			}
			case Rank.B:
			{
				Console.WriteLine("Bclass");
				break;
			}
			case Rank.C:
			{
				Console.WriteLine("Cclass");
				break;
			}
			default :
			{
				Console.WriteLine("Dclass");
				break;
			}
		}
	}
}

반복문

  • 특정 조건을 만족하는 동안 특정 코드를 반복해서 실행하도록 하는 문장
  • C#에서는 while, do while, for, foreach의 4가지를 사용함.

while

  • 조건식은 if와 동일하게 논리형식이 사용되며, 조건식이 true일 동안 계속 반복됨.
  • 얼마나 반복해야하는지 알기 힘든 경우 주로 사용됨.
  • 무한 루프를 주의해야 함.
1
2
3
4
5
6
7
8
while (조건식)
{
	codes_to_repeat;
	if (조건식2) {
		break; // while 밖으로 탈출
	}
	codes_to_repeat2;
}

do while

  • while과 유사하나, 반복될 코드를 무조건 한번 실행 후 조건문 판별
1
2
3
4
5
do
{
	codes_to_repeat;
}
while (조건문); //semicolon 반드시 필요
  • do codeblock 내의 command를 실행하고 이후 조건문을 따져서 true이면 반복.

for

  • 조건식이 참인 동안 코드를 반복시행
  • 초기화 식과 반복식을 통해 while문보다 반복문을 더 정교하게 제어할 수 있음.
  • 초기화식, 조건식, 반복식으로 구성
1
2
3
4
for (초기화식; 조건식;반복식;)
{
	codes_to_repeat;
}
  • 초기화식 : 반복 실행 전 한번 실행, 반복문에서 사용할 변수 초기화
  • 반복문을 계속 수행할지 결정하는 식. true일 경우 반복문을 계속 실행
  • 반복식 : 반복이 끝날 때 마다 실행, 주로 조건시에서 사용하는 변수값을 조절.

.Contains

  • “string”.Contains(“s”) → true

foreach

  • 배열이나 콜렉션 형식의 데이터를 순환하며 각 데이터의 요소에 차례로 접근하는 반복문
  • 마지막 요소에 도달하면 자동으로 반복문 종료
1
2
3
4
foreach (데이터 형식 변수명 in 배열 or collection)
{
	codes_to_repeat;
}

예제

1
2
3
4
5
6
int[] array = new int[]{0, 1, 2, 3, 4, 5};
foreach (int item in array)
{
	Console.WriteLine(item); // 0 1 2 3 4 5 출력
}
Console.WriteLine(array.Length); // 5 출력
  • foreach 문 내부에서 array를 건드리면 안됨.

예제

1
2
3
4
5
6
7
8
int[] array = new int[]{10, 20, 30};
foreach (int item in array)
{
	Console.WriteLine(item);
	array = new int[] {1, 2, 3};
}
//결과는 10, 20, 30, 1, 2, 3으로 동작함.
//예상치 못한 결과가 나올 수 있음.

break를 이용한 점프문

  • for, while foreach, do while에서 사용할 수 있는 break. 바로 반복문의 밖으로 빠져나오게 함

예제

1
2
3
4
5
6
7
8
9
10
int a=1;
while(a>0)
{
	Console.WriteLine(a);
	a++;
	if (a==10)
	{
		break; // a가 10이 되는 순간  while문을 빠져나감
	}
}

continue

  • 반복문을 한 회 건너뛰어 반복을 수행.
  • 충분히 동일한 기능이 가능하지만, 가독성을 높임.

예제

1
2
3
4
5
6
7
for (int i = 0;i<5;i++)
{
	if (i==2)
		continue; //해당 코드블록을 끝내고 반복문의 처음으로 돌아감
	Console.writeLine(i); 
}
//0, 1, 3, 4, 5 나옴

goto를 이용한 점프문

  • 지정 레이블 (colon으로 표기)된 곳까지 한번에 이동함
  • 코드의 가독성을 떨어트려 거의 사용되지 않음.
1
2
3
4
5
6
7
8
9
10
for (asdf; asdf; asdf)
{
	for (asd; asd; asd;)
	{
		if (adsf)
			goto EXIT;
	}
}
EXIT:
	Console.WriteLine("EXIT"); //adsf를 True로 만족시키면 모든 반복문의 밖으로 나옴
This post is licensed under CC BY 4.0 by the author.