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

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

문은 세미콜론으로 끝나는 한 줄의 코드로 구성될 수도 있고 한 줄로 된 문이 여러 개가 포함된 블록이 될 수도 있습니다. 문 블록은 {} 괄호로 묶이며 중첩된 블록을 포함할 수 있습니다. 다음 코드에서는 한 줄로 된 문과 여러 줄로 된 문 블록의 예를 보여 줍니다.

    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 #{0} is {1}. Circumference = {2:N2}",
                                    counter, radius, circumference);

            // 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# 키워드/참고

선언 문

선언 문은 새 변수 또는 상수를 소개합니다. 필요한 경우 변수 선언에서 변수에 값을 할당할 수도 있습니다. 상수 선언에서는 반드시 값을 할당해야 합니다.

식 문

값을 계산하는 식 문에서는 변수에 값을 저장해야 합니다.

선택 문

선택 문을 사용하면 하나 이상의 지정된 조건에 따라 다른 코드 섹션으로 분기할 수 있습니다. 자세한 내용은 다음 항목을 참조하십시오.

if, else, switch, case

반복 문

반복 문을 사용하면 배열과 같은 컬렉션을 반복하거나 지정된 조건이 충족될 때까지 동일한 문 집합을 반복적으로 수행할 수 있습니다. 자세한 내용은 다음 항목을 참조하십시오.

do, for, foreach, in, while

점프 문

점프 문을 사용하면 제어를 다른 코드 섹션으로 이동할 수 있습니다. 자세한 내용은 다음 항목을 참조하십시오.

break, continue, default, goto, return, yield

예외 처리문

예외 처리문을 사용하면 런타임에 발생하는 예외 조건으로부터 적절하게 복구할 수 있습니다. 자세한 내용은 다음 항목을 참조하십시오.

throw, try-catch, try-finally, try-catch-finally

Checked 및 Unchecked

Checked 및 unchecked 문을 사용하면 너무 작아서 결과 값을 보유할 수 없는 변수에 결과가 저장될 때 숫자 연산에서 오버플로가 발생할 수 있는지 여부를 지정할 수 있습니다. 자세한 내용은 checkedunchecked를 참조하십시오.

fixed 문

fixed 문은 가비지 수집기에서 이동 가능한 변수를 재배치할 수 없도록 합니다. 자세한 내용은 fixed를 참조하십시오.

lock 문

lock 문을 사용하면 코드 블록에 대한 액세스를 한 번에 하나의 스레드로 제한할 수 있습니다. 자세한 내용은 lock을 참조하십시오.

레이블 문

문에 레이블을 지정한 다음 goto 키워드를 사용하여 해당 레이블이 지정된 문으로 이동할 수 있습니다. 다음 행의 예제를 참조하십시오.

빈 문

빈 문은 하나의 세미콜론으로 구성됩니다. 빈 문은 아무런 작업도 수행하지 않으므로 문이 필요하지만 동작을 수행할 필요가 없는 경우에 사용됩니다. 다음 예제에서는 빈 문을 사용하는 두 가지 경우를 보여 줍니다.

포함 문

do, while, forforeach를 비롯한 일부 문의 뒤에는 반드시 포함 문이 옵니다. 이러한 포함 문은 하나의 문일 수도 있고 여러 개의 문이 {} 괄호로 묶인 문 블록일 수도 있습니다. 한 줄로 된 포함 문도 다음 예제와 같이 {} 괄호로 묶일 수 있습니다.

// 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# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목

개념

C# 프로그래밍 가이드