goto 구문
- goto 문은 레이블이 지정된 곳으로 직접 프로그램 컨트롤을 전송합니다.
- 일반적으로 switch 문에서 switch-case 레이블 또는 기본 레이블로 컨트롤을 전송하는 데 사용됩니다.
goto 사용 예제1
- switch문에서 사용 예제를 확인해봅시다.
n
변수에 2를 입력받으면 switch문의 case2
의 코드를 실행 후 goto문을 만나게 되면서 case 1
으로 이동하여 코드를 수행하게됩니다.
- 3을 입력받으면 case3 -> case2 -> case1 조건으로 이동하여 코드를 수행하게됩니다.goto 사용 예제2
static void Main(string[] args)
{
string s = Console.ReadLine();
int n = int.Parse(s);
int cost = 0;
switch(n)
{
case 1 :
cost += 10;
break;
case 2:
cost += 10;
goto case 1;
case 3:
cost += 10;
goto case 2;
default:
Console.Write("Invalid selection.");
break;
}
Console.WriteLine($"n = {n}, cost = {cost}");
}
- C#에서는 C언어의 goto문 만큼 자유롭게 이동할 수 없습니다.
- 특정 코드의 블록의 "바깥쪽"으로 코드 순서를 옮길 수 있지만, "안쪽"으로는 이동할 수 없습니다.
static void Sample_Goto_Outside()
{
{
goto label; //코드 블록 바깥쪽으로 이동
}
label:
Console.WriteLine("Finished");
}
static void Sample_Goto_Inside()
{
goto label; //코드 블록 안쪽으로 이동
{
label:
Console.WriteLine("Finished");
}
}
정리
- goto문을 사용하면 프로그램의 흐름이 바뀌므로 스파게티 코드가 되어 해석하기 어려울 수 있습니다.