프로그램에서 수행하는 작업은 문으로 표현됩니다. 일반적인 작업에는 지정된 조건에 따라 변수 선언, 값 할당, 메서드 호출, 컬렉션 반복 및 하나 이상의 코드 블록으로 분기가 포함됩니다. 프로그램에서 문이 실행되는 순서를 제어 흐름 또는 실행 흐름이라고 합니다. 프로그램이 런타임에 수신하는 입력에 반응하는 방식에 따라 프로그램이 실행될 때마다 제어 흐름이 달라질 수 있습니다.
문은 세미콜론으로 끝나는 코드 한 줄 또는 블록의 일련의 단일 줄 문으로 구성됩니다. 문장 블록은 {} 괄호로 묶이고 중첩된 블록을 포함할 수 있습니다. 다음 코드는 한 줄 문과 여러 줄 문 블록의 두 가지 예를 보여 줍니다.
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 문은 컨트롤을 다른 코드 섹션으로 전송합니다. 자세한 내용은 다음 항목을 참조하세요. |
예외 처리문 | 예외 처리 문을 사용하면 런타임에 발생하는 예외적 조건에서 원활하게 복구할 수 있습니다. 자세한 내용은 다음 항목을 참조하세요. |
checked 및 unchecked |
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# 언어 사양의 문 섹션을 참조하세요.
참고하십시오
- 진술 키워드
- C# 연산자 및 식
.NET