다음을 통해 공유


선택 문 - if, if-elseswitch

if, if-elseswitch 문은 식 값에 따라 가능한 여러 경로에서 실행할 문을 선택합니다. 이 if은 제공된 부울 표현식이 true(으)로 평가되는 경우에만 명령문을 실행합니다. 이 if-else을 사용하면 부울 식에 따라 따를 두 코드 경로 중 하나를 선택할 수 있습니다. switch은 식과의 패턴 일치를 기반으로 실행할 문 목록을 선택합니다.

if

if 문은 다음의 두 가지 형식 중 하나일 수 있습니다.

  • else 파트가 있는 if 문은 다음 예제에서 보는 바와 같이 부울 식의 값에 따라 실행할 두 문 중 하나를 선택합니다.

    DisplayWeatherReport(15.0);  // Output: Cold.
    DisplayWeatherReport(24.0);  // Output: Perfect!
    
    void DisplayWeatherReport(double tempInCelsius)
    {
        if (tempInCelsius < 20.0)
        {
            Console.WriteLine("Cold.");
        }
        else
        {
            Console.WriteLine("Perfect!");
        }
    }
    
  • 다음 예제에서 보는 바와 같이 else 파트가 없는 if 문은 부울 식이 true로 계산되는 경우에만 본문을 실행합니다.

    DisplayMeasurement(45);  // Output: The measurement value is 45
    DisplayMeasurement(-3);  // Output: Warning: not acceptable value! The measurement value is -3
    
    void DisplayMeasurement(double value)
    {
        if (value < 0 || value > 100)
        {
            Console.Write("Warning: not acceptable value! ");
        }
    
        Console.WriteLine($"The measurement value is {value}");
    }
    

다음 예제에서 보는 바와 같이 if 문을 중첩하여 여러 조건을 확인할 수 있습니다.

DisplayCharacter('f');  // Output: A lowercase letter: f
DisplayCharacter('R');  // Output: An uppercase letter: R
DisplayCharacter('8');  // Output: A digit: 8
DisplayCharacter(',');  // Output: Not alphanumeric character: ,

void DisplayCharacter(char ch)
{
    if (char.IsUpper(ch))
    {
        Console.WriteLine($"An uppercase letter: {ch}");
    }
    else if (char.IsLower(ch))
    {
        Console.WriteLine($"A lowercase letter: {ch}");
    }
    else if (char.IsDigit(ch))
    {
        Console.WriteLine($"A digit: {ch}");
    }
    else
    {
        Console.WriteLine($"Not alphanumeric character: {ch}");
    }
}

식 컨텍스트에서 조건 연산자?:를 사용하여 부울 식의 값에 따라 두 식 중 하나를 계산할 수 있습니다.

switch

switch 문은 다음 예제에서 보는 바와 같이 일치 식과의 패턴 일치에 따라 실행할 문 목록을 선택합니다.

DisplayMeasurement(-4);  // Output: Measured value is -4; too low.
DisplayMeasurement(5);  // Output: Measured value is 5.
DisplayMeasurement(30);  // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN);  // Output: Failed measurement.

void DisplayMeasurement(double measurement)
{
    switch (measurement)
    {
        case < 0.0:
            Console.WriteLine($"Measured value is {measurement}; too low.");
            break;

        case > 15.0:
            Console.WriteLine($"Measured value is {measurement}; too high.");
            break;

        case double.NaN:
            Console.WriteLine("Failed measurement.");
            break;

        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}

위의 예제에서 switch 문은 다음 패턴을 사용합니다.

Important

switch 문에서 지원되는 패턴에 관한 자세한 내용은 패턴을 참조하세요.

앞의 예제에서는 default 사례도 보여 줍니다. default 사례는 일치 식이 다른 모든 사례 패턴과 일치하지 않을 때 실행할 문을 지정합니다. 일치 식이 어떤 사례 패턴과도 일치하지 않으며 default 사례가 없는 경우 컨트롤은 switch 문으로 이동합니다.

switch 문은 사례 패턴이 일치 식과 일치하고 케이스 가드(있는 경우)가 true로 계산되는 첫 번째 스위치 섹션에서 문 목록을 실행합니다. switch 문은 텍스트 순서에 따라 위쪽에서 아래쪽으로 사례 패턴을 평가합니다. 접근할 수 없는 사례가 switch 문에 포함된 경우 컴파일러에서 오류를 생성합니다. 이는 대문자로 이미 처리되었거나 패턴을 일치시킬 수 없는 사례에 속합니다.

참고 항목

default 사례는 switch 문의 어느 위치에나 나타날 수 있습니다. 해당 위치에 관계없이 default 사례는 다른 모든 사례 패턴이 일치하지 않거나 스위치 섹션 중 하나에서 goto default; 문이 실행되는 경우에만 평가됩니다.

다음 예제에 나와 있는 것처럼 switch 문의 한 섹션에 대해 여러 개의 사례 패턴을 지정할 수 있습니다.

DisplayMeasurement(-4);  // Output: Measured value is -4; out of an acceptable range.
DisplayMeasurement(50);  // Output: Measured value is 50.
DisplayMeasurement(132);  // Output: Measured value is 132; out of an acceptable range.

void DisplayMeasurement(int measurement)
{
    switch (measurement)
    {
        case < 0:
        case > 100:
            Console.WriteLine($"Measured value is {measurement}; out of an acceptable range.");
            break;
        
        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}

switch 문 내에서 컨트롤은 한 스위치 섹션에서 다음 스위치 섹션으로 이동할 수 없습니다. 이 단원의 예제에서 볼 수 있듯이 일반적으로 각 스위치 섹션의 끝에 break 문을 사용하여 switch 문 외부로 컨트롤을 전달합니다. 또한 returnthrow 문을 사용하여 switch 문 외부로 컨트롤을 전달할 수도 있습니다. 컨트롤 이동 동작을 모방하고 컨트롤을 다른 스위치 섹션으로 전달하기 위해 goto을 사용할 수 있습니다.

식 컨텍스트에서 switch을 사용하여 식과의 패턴 일치를 기반으로 후보 식 목록에서 단일 식을 계산할 수 있습니다.

케이스 가드

사례 패턴은 스위치 섹션의 실행 조건을 지정하기엔 표현력이 충분하지 않을 수 있습니다. 이 경우 케이스 가드를 사용할 수 있습니다. 케이스 가드는 일치하는 패턴과 함께 충족되어야 하는 추가 조건입니다. 케이스 가드는 부울 식이어야 합니다. 다음 예제와 같이 패턴 뒤에 있는 when 키워드 뒤에 케이스 가드를 지정합니다.

DisplayMeasurements(3, 4);  // Output: First measurement is 3, second measurement is 4.
DisplayMeasurements(5, 5);  // Output: Both measurements are valid and equal to 5.

void DisplayMeasurements(int a, int b)
{
    switch ((a, b))
    {
        case (> 0, > 0) when a == b:
            Console.WriteLine($"Both measurements are valid and equal to {a}.");
            break;

        case (> 0, > 0):
            Console.WriteLine($"First measurement is {a}, second measurement is {b}.");
            break;

        default:
            Console.WriteLine("One or both measurements are not valid.");
            break;
    }
}

위의 예제에서는 중첩 관계형 패턴이 있는 위치 패턴을 사용합니다.

C# 언어 사양

자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.

패턴에 대한 자세한 내용은 C# 언어 사양패턴 및 패턴 일치 섹션을 참조하세요.

참고 항목