C#의 goto 문

Fil Zjazel Romaeus Villegas 2023년10월12일
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

관련 문장 - Csharp Statement