다음을 통해 공유


문장 (C# 프로그래밍 가이드)

프로그램에서 수행하는 작업은 문으로 표현됩니다. 일반적인 작업에는 지정된 조건에 따라 변수 선언, 값 할당, 메서드 호출, 컬렉션 반복 및 하나 이상의 코드 블록으로 분기가 포함됩니다. 프로그램에서 문이 실행되는 순서를 제어 흐름 또는 실행 흐름이라고 합니다. 프로그램이 런타임에 수신하는 입력에 반응하는 방식에 따라 프로그램이 실행될 때마다 제어 흐름이 달라질 수 있습니다.

문은 세미콜론으로 끝나는 코드 한 줄 또는 블록의 일련의 단일 줄 문으로 구성됩니다. 문장 블록은 {} 괄호로 묶이고 중첩된 블록을 포함할 수 있습니다. 다음 코드는 한 줄 문과 여러 줄 문 블록의 두 가지 예를 보여 줍니다.

    public static void Main()
    {
        // Declaration statement.
        int counter;

        // Assignment statement.
        counter = 1;

        // Error! This is an expression, not an expression statement.
        // counter + 1;

        // Declaration statements with initializers are functionally
        // equivalent to  declaration statement followed by assignment statement:
        int[] radii = [15, 32, 108, 74, 9]; // Declare and initialize an array.
        const double pi = 3.14159; // Declare and initialize  constant.

        // foreach statement block that contains multiple statements.
        foreach (int radius in radii)
        {
            // Declaration statement with initializer.
            double circumference = pi * (2 * radius);

            // Expression statement (method invocation). A single-line
            // statement can span multiple text lines because line breaks
            // are treated as white space, which is ignored by the compiler.
            System.Console.WriteLine($"Radius of circle #{counter} is {radius}. Circumference = {circumference:N2}");

            // Expression statement (postfix increment).
            counter++;
        } // End of foreach statement block
    } // End of Main method body.
} // End of SimpleStatements class.
/*
   Output:
    Radius of circle #1 = 15. Circumference = 94.25
    Radius of circle #2 = 32. Circumference = 201.06
    Radius of circle #3 = 108. Circumference = 678.58
    Radius of circle #4 = 74. Circumference = 464.96
    Radius of circle #5 = 9. Circumference = 56.55
*/

문 유형

다음 표에서는 C#의 다양한 유형의 문과 관련 키워드를 나열하고 자세한 정보를 포함하는 토픽에 대한 링크를 제공합니다.

카테고리 C# 키워드 /참고
선언문 선언문에는 새 변수 또는 상수가 도입됩니다. 변수 선언은 필요에 따라 변수에 값을 할당할 수 있습니다. 상수 선언에서는 할당이 필요합니다.
표현식 문 값을 계산하는 식 문은 값을 변수에 저장해야 합니다.
선택 문 선택 문을 사용하면 하나 이상의 지정된 조건에 따라 코드의 여러 섹션으로 분기할 수 있습니다. 자세한 내용은 다음 항목을 참조하세요.
반복 문 반복 문을 사용하면 배열과 같은 컬렉션을 반복하거나 지정된 조건이 충족될 때까지 동일한 문 집합을 반복적으로 수행할 수 있습니다. 자세한 내용은 다음 항목을 참조하세요.
점프 문장 Jump 문은 컨트롤을 다른 코드 섹션으로 전송합니다. 자세한 내용은 다음 항목을 참조하세요.
예외 처리문 예외 처리 문을 사용하면 런타임에 발생하는 예외적 조건에서 원활하게 복구할 수 있습니다. 자세한 내용은 다음 항목을 참조하세요.
checkedunchecked checked and unchecked 문을 사용하면 결과가 너무 작은 변수에 저장되어 결과 값을 보유할 수 없을 때 정수 형식 숫자 연산이 오버플로를 발생시킬 수 있는지 여부를 지정할 수 있습니다.
await 선언문 메서드에 async 한정자를 표시하면 메서드에서 await 연산자를 사용할 수 있습니다. 컨트롤이 await 비동기 메서드의 식에 도달하면 컨트롤이 호출자로 반환되고 대기 중인 작업이 완료될 때까지 메서드의 진행률이 일시 중단됩니다. 작업이 완료되면 메서드가 실행이 다시 시작될 수 있습니다.

간단한 예제는 메서드의 "비동기 메서드" 섹션을 참조 하세요. 자세한 내용은 async와 await를 사용한 비동기 프로그래밍을 참조하세요.
yield return 선언문 반복기는 배열 목록과 같은 컬렉션에 대해 사용자 지정 반복을 수행합니다. 반복기는 yield return 문을 사용하여 각 요소를 따로따로 반환할 수 있습니다. 명령문 yield return 에 도달하면 코드의 현재 위치가 저장됩니다. 다음에 반복기가 호출될 때 해당 위치에서 실행이 다시 시작됩니다.

자세한 내용은 반복기를 참조하세요.
fixed 선언문 고정문은 가비지 수집기가 이동 가능한 변수를 재배치하지 못하게 합니다. 자세한 내용은 수정을 참조하세요.
lock 선언문 lock 문을 사용하면 코드 블록에 대한 액세스를 한 번에 하나의 스레드로 제한할 수 있습니다. 자세한 내용은 잠금을 참조 하세요.
레이블된 문장 문에 레이블을 지정한 다음 goto 키워드를 사용하여 레이블이 지정된 문으로 이동할 수 있습니다. (다음 행의 예제를 참조하세요.)
빈 명령문 빈 명령문은 단일 세미콜론으로 구성됩니다. 아무 작업도 수행하지 않으며 문이 필요하지만 작업을 수행할 필요가 없는 위치에서 사용할 수 있습니다.

선언문

다음 코드에서는 초기 할당이 있는 경우와 없는 경우의 변수 선언, 그리고 필요한 초기화가 포함된 상수 선언의 예를 보여 줍니다.

// Variable declaration statements.
double area;
double radius = 2;

// Constant declaration statement.
const double pi = 3.14159;

표현문

다음 코드는 할당, 객체 생성을 동반한 할당, 메서드 호출을 포함한 식 문의 예제를 보여줍니다.

// Expression statement (assignment).
area = 3.14 * (radius * radius);

// Error. Not  statement because no assignment:
//circ * 2;

// Expression statement (method invocation).
System.Console.WriteLine();

// Expression statement (new object creation).
System.Collections.Generic.List<string> strings =
    new System.Collections.Generic.List<string>();

빈 문장

다음 예제에서는 빈 문에 대해 두 가지 용도를 보여 줍니다.

void ProcessMessages()
{
    while (ProcessMessage())
        ; // Statement needed here.
}

void F()
{
    //...
    if (done) goto exit;
//...
exit:
    ; // Statement needed here.
}

내장된 문장

반복 문과 같은 일부 에는 항상 뒤에 포함된 문이 있습니다. 이 포함된 문은 단일 문 또는 문 블록의 대괄호로 {} 묶인 여러 문일 수 있습니다. 다음 예제와 같이 단일 줄 포함 문도 {} 브래킷으로 묶을 수 있습니다.

// Recommended style. Embedded statement in  block.
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
{
    System.Console.WriteLine(s);
}

// Not recommended.
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
    System.Console.WriteLine(s);

대괄호로 {} 묶지 않은 포함된 문은 선언문이나 레이블이 지정된 문이 될 수 없습니다. 이는 다음 예제에서 확인할 수 있습니다.

if(pointB == true)
    //Error CS1023:
    int radius = 5;

포함된 문을 블록에 넣어 오류를 해결합니다.

if (b == true)
{
    // OK:
    System.DateTime d = System.DateTime.Now;
    System.Console.WriteLine(d.ToLongDateString());
}

중첩 구문 블록

다음 코드와 같이 문 블록을 중첩할 수 있습니다.

foreach (string s in System.IO.Directory.GetDirectories(
    System.Environment.CurrentDirectory))
{
    if (s.StartsWith("CSharp"))
    {
        if (s.EndsWith("TempFolder"))
        {
            return s;
        }
    }
}
return "Not found.";

도달 불가능한 문장

컴파일러가 제어 흐름이 어떤 상황에서도 특정 문에 도달할 수 없다고 판단하면 다음 예제와 같이 경고 CS0162가 생성됩니다.

// An over-simplified example of unreachable code.
const int val = 5;
if (val < 4)
{
    System.Console.WriteLine("I'll never write anything."); //CS0162
}

C# 언어 사양

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

참고하십시오