상세 컨텐츠

본문 제목

[C#] 제어문

.NET/C#

by 클리엘 클리엘 2021. 1. 21. 17:36

본문

728x90

1. 분기문

 

분기문은 프로그램의 흐름을 제어하는 제어 구문입니다.

 

(1) if

static void Main(string[] args)
{
	int i = 10;
	if (i == 10) {
		Console.WriteLine($"Result : ㅑ는 10");
	}
	else {
		Console.WriteLine($"Result : 그외");
	}
}

괄호(())안의 조건이 참(true)이면 if 이하 구문을, 거짓(false)이면 else이하 구문을 실행합니다. else는 생략할 수 있으며 실행할 구문이 한 줄로 작성된 경우 중괄호({})는 생략할 수 있습니다.(중괄호 생략 규칙은 다른 제어문에도 동일하게 적용됩니다.)

 

비교할 조건이 여러 개라면 else if를 사용해 조건을 추가할 수 있습니다.

static void Main(string[] args)
{
	int i = 10;
	if (i == 10)
		Console.WriteLine($"Result : ㅑ는 10");
	else if (i > 10)
		Console.WriteLine($"Result : ㅑ는 10보다 큼");	
}

(2) switch

static void Main(string[] args)
{
	int i = 10;

	switch(i) {
		case 10:
			Console.WriteLine($"Result : {i}");
			break;
		case 20:
			Console.WriteLine($"Result : {i}");
			break;
		default:
			Console.WriteLine($"Result : -");
			break;
	}
}

괄호 안의 값에 따라 처리를 분기합니다. case를 통해 분기할 값을 지정하며 처리 구문이 여러 줄이라 하더라도 중괄호({})는 필요하지 않습니다. 또한 처리식의 맨 마지막에는 반드시 break나 goto, return 등의 점프 문이 존재해야 합니다. C/C++에서는 점프 문을 생략할 수 있었지만 C#은 생략이 불가능합니다.

 

default는 상위에 정의된 case문에서 어떤 것도 해당되지 않을 때 분기하는 부분이며 필요하지 않다면 생략이 가능합니다.

 

swicth에서 괄호 안에 들어가는 데이터 형식은 정수/문자열이 사용 가능하며 C#7.0 이상이라면 object도 올 수 있습니다. 이때 case에서는 분기할 데이터형이 지정되어야 하며 데이터형이 일치할 경우 값을 담을 변수도 같이 지정되어 있어야 합니다.

static void Main(string[] args)
{
	object o = 10;

	switch(o) {
		case int i when i <= 10:
			Console.WriteLine($"Result : {i}");
			break;
		case int i when i > 10:
			Console.WriteLine($"Result : {i}");
			break;
		case float f:
			Console.WriteLine($"Result : {f}");
			break;
		default:
			Console.WriteLine($"Result : -");
			break;
	}
}

object사용 시 각 case에서는 when을 통해 변수의 값을 확인할 수 있으며 값에 따라 분기를 달리할 수 있습니다.

 

2. 반복문

 

(1) while

static void Main(string[] args)
{
	int i = 0;

	while(i <= 10) {
		Console.WriteLine($"{i++}");
	}
}

while은 괄호(())안의 조건식이 참(true)이 될 때까지 내부 구문을 반복해서 실행합니다.

 

(2) do while

static void Main(string[] args)
{
	int i = 0;

	do {
		Console.WriteLine($"{i++}");
	}
	while(i <= 10);
}

while은 내부 처리를 실행하기 전에 처음부터 조건식을 확인하지만 do while은 처음 실행 시 조건 없이 내부 처리를 수행한 뒤 그다음 실행 시부터 반복 조건을 확인한다는 차이가 있습니다.

 

(3) for

static void Main(string[] args)
{
	for (int i = 0; i <= 10; i++) {
		Console.WriteLine($"{i}");
	}
}

예제에서 int i = 0은 초기식이며 외부 변수나 for내부에서 사용될 변수를 선언하고 변수의 시작 값을 설정합니다. i <= 10은 조건식이며 이 조건에 따라 for문에 내부 처리를 반복해서 수행할 것인지를 판단합니다. 마지막으로 I++는 초기식에서 설정한 변숫값을 for문이 반복할 때마다 수행하는 부분입니다.

 

for에서는 이 3가지 조건식을 ;로 분리해 사용합니다.

 

(4) foreach

static void Main(string[] args)
{
	int[] i = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

	foreach(int j in i) {
		Console.WriteLine($"{j}");
	}
}

foreach는 배열이나 컬렉션에서 요소를 하나씩 추출하는 반복문입니다. 예제에서는 i배열에서 요소를 하나씩 가져와 j변수에 넣은 동작을 i배열의 끝에 도달할 때까지 반복하도록 합니다.

 

3. 점프 문

 

(1) break

static void Main(string[] args)
{
	int i = 0;

	while(i <= 10) {
		Console.WriteLine($"{i++}");

		if (i == 6)
			break;
	}
}

위에서 알아본 반복문에서 흔히 사용되는 구문으로 반복문을 빠져나올 수 있도록 합니다. 에제에서는 while문이 반복 수행될 때마다 i값을 확인하고 i의 값이 6이 되면 while문을 빠져나올 수 있게 break문을 사용하고 있습니다.

 

(2) continue

static void Main(string[] args)
{
	int i = 0;

	while(i <= 10) {
		if (i == 6) {
			++i;
			continue;
		}

		Console.WriteLine($"{i++}");
	}
}

break는 반복문을 빠져나올 수 있도록 하지만 continue는 처리를 skip 합니다. 따라서 위 에제 프로그램을 실행하면 0부터 순서대로 10까지 표시하지만 도중에 6은 출력되지 않습니다.

 

(3) goto

static void Main(string[] args)
{
	int i = 0;

	while(i <= 10) {
		if (i == 6)
			goto finish;

		Console.WriteLine($"{i++}");
	}

	finish:
		Console.WriteLine("End");
}

처리의 흐름을 다른 곳으로 분기하는 구문입니다. goto 사용을 위해서는 우선 '[이름]:'형식으로 분기할 위치와 처리 구문을 정의한 뒤 'goto [이름]'을 통해 분기합니다. 예제에서는 i의 값이 6이 되면 while밖에 있는 finish: 쪽으로 처리를 분기하도록 했으므로 5까지 출력한 뒤 End를 표시하고 프로그램을 종료하게 됩니다.

728x90

'.NET > C#' 카테고리의 다른 글

[C#] 구조체와 튜플  (0) 2021.01.25
[C#] 메서드  (0) 2021.01.22
[C#] 제어문  (0) 2021.01.21
[C#] 연산자  (0) 2021.01.19
[C#] 문자열 및 문자열출력 다루기  (0) 2021.01.18
[C#] 데이터  (0) 2021.01.15

관련글 더보기

댓글 영역