C#의 goto 문
이 자습서에서는 C#에서 goto
구문을 사용하는 방법을 보여주고 코드에서 실제 사용하는 몇 가지 예를 제공합니다.
goto
는 프로그램이 코드의 새로운 부분을 만나면 자동으로 이동한다는 무조건적인 점프 문입니다. goto
를 사용하려면 레이블로 표시된 명령문과 레이블을 호출하는 인스턴스가 모두 있어야 합니다.
레이블을 생성하려면 레이블이 호출될 때 실행하려는 명령문 앞에 콜론을 사용하여 이름을 추가합니다.
예시:
using System;
namespace goto_Example1 {
class Program {
static void Main(string[] args) {
int a = 1;
goto print_a;
a = 2;
print_a:
Console.WriteLine(a.ToString());
Console.ReadLine();
}
}
}
이 예에서 정수 변수 a
를 1과 같도록 초기화합니다. 즉시 goto
를 호출하여 print_a
문으로 이동하기 때문에 a
는 2로 설정되지 않습니다. 따라서 a
의 값을 콘솔에 인쇄할 때 게시되는 것은 2가 아니라 1입니다.
출력:
1
C#
에서 goto
를 사용해야 하는 경우
그러나 goto
는 완전히 다른 섹션으로 이동해야 하는 경우 논리의 흐름이 명확하지 않기 때문에 코드의 가독성을 악화시킨다는 비판을 받아 현재 일반적으로 사용되지 않습니다.
그러나 goto
가 유익하고 가독성을 향상시킬 수 있는 경우가 여전히 있습니다. 예를 들어 중첩 루프 및 switch
문을 이스케이프할 수 있습니다.
예시:
using System;
namespace goto_Example2 {
class Program {
static void Main(string[] args) {
// Intialize the integer variable a
int a = 2;
// Run the function test input
TestInput(a);
// Change the value of a and see how it affects the output from TestInput()
a = 1;
TestInput(a);
a = 3;
TestInput(a);
Console.ReadLine();
}
static void TestInput(int input) {
// In this example function, we only want to accept either 1 or 2 as values.
// If we accept the value 1, we want to add to it and then run case 2;
// Print the original value
Console.WriteLine("Input Being Tested: " + input.ToString());
switch (input) {
case 1:
input++;
// If goto isn't called, the input value will not be modified, and its final value would
// have been unchanged
goto case 2;
case 2:
input = input / 2;
break;
default:
break;
}
Console.WriteLine("Final Value: " + input.ToString() + "\n");
}
}
}
위의 예에서는 전달된 값에 따라 다른 작업을 수행하는 샘플 함수를 만들었습니다. 세 가지 경우를 고려하고 있습니다. 첫 번째는 값이 1인 경우입니다. 이 경우 입력 값에 추가한 다음 goto
기능을 사용하여 사례 2로 진행합니다. goto
가 호출되지 않았다면 입력 값은 변경되지 않은 상태로 유지되었을 것입니다.
경우 2의 경우 입력을 2로 나눕니다. 마지막으로 전달된 다른 값은 기본 경우에 해당하며 전혀 수정되지 않습니다. 마지막으로 최종 값이 인쇄되고 사례 1과 2의 절대값이 동일함을 보여줍니다. goto
로 인해 처음에는 케이스 사양에 맞지 않더라도 해당 문으로 점프하여 케이스를 적용할 수 있습니다.
출력:
Input Being Tested: 2
Final Value: 1
Input Being Tested: 1
Final Value: 1
Input Being Tested: 3
Final Value: 3