
코드를 쓰다 보면 '상황에 따라 다르게 처리'해야 하는 순간이 꼭 옵니다.
분기문을 사용해서 특정 조건에 따라 다른 코드를 실행하여
프로그램이 다양한 상황에서 유연하게 대응할 수 있게 합니다.
조건이 '참'이면 중괄호 { }안의 코드를 실행하고 '거짓'이면 건너뜁니다.
코드가 한 줄인 경우 { }중괄호를 생략할 수 있습니다.
경우에 따라서는 if문을 삼항 연산자로 대체할 수 있어요.
삼항 연산자 예시: string result = (score >= 60) ? "합격" : "불합격";
[구조]
if (조건식)
{
// 참인 경우에 실행하는 코드
}
[코드]
int score = 85;
if (score >= 80) // 중괄호 사용
{
Console.WriteLine("합격입니다!");
}
if (score == 100) // 중괄호 생략
Console.WriteLine("만점 축하합니다!");
[실행 결과]
합격입니다!
if 문은 '코드를 실행할지 말지'를 결정할 때 주로 쓰이고,
삼항 연산자(조건 ? 값1 : 값2)는 '어떤 값을 선택할지'를 표현할 때 사용합니다.
if가 '참'이면 if블록을 실행합니다.
if가 '거짓'이면 else블록을 실행합니다.
else가 한 줄인 경우 { }중괄호를 생략할 수 있습니다.
[구조]
if (조건식)
{
// 참인 경우에 실행하는 코드
}
else
{
// 거짓인 경우에 실행하는 코드
}
[코드]
int score = 50;
if (score >= 60)
{
Console.WriteLine("합격입니다!");
}
else
{
Console.WriteLine("불합격입니다!");
}
[실행 결과]
불합격입니다!
순차적으로 조건을 검사하여 처음에 '참'이 되는 블록 하나만 실행합니다.
[코드]
int score = 75;
char grade;
if (score >= 90) // 첫 번째 조건
{
grade = 'A';
}
else if (score >= 80) // 두 번째 조건
{
grade = 'B';
}
else if (score >= 70) // 세 번째 조건
{
grade = 'C';
}
else // 주어진 조건이 모두 거짓일 경우
{
grade = 'D';
}
Console.WriteLine($"{grade}등급 입니다.");
[실행 결과]
C등급 입니다.
여러개의 if문이 있으면, 코드가 길어지고 가독성이 떨어집니다.
이럴 때는switch문을 사용해서 코드를 간결하게 하고 가독성은 높여집니다.
switch문은 여러 개의 선택지 중 하나를 고를 때 유용합니다.
C#에서 switch문을 사용 할 때는 각 case마다 break;가 필요합니다.
어떤 case에도 해당하지 않을 때는 default:블록을 실행합니다.
[코드]
string season = "겨울";
switch (season) // 전통적인 switch 문
{
case "봄":
Console.WriteLine("꽃놀이하러 갑시다!");
break;
case "여름":
Console.WriteLine("시원한 바다로 떠나요!");
break;
case "가을":
Console.WriteLine("단풍 구경하기 좋아요!");
break;
case "겨울":
Console.WriteLine("따뜻한 코코아 한 잔 어떠세요?");
break;
default: // 위에서 제시된 어떤 'case'에도 해당하지 않을 때
Console.WriteLine("어떤 계절인지 잘 모르겠어요!");
break;
}
[실행 결과]
따뜻한 코코아 한 잔 어떠세요?
C#에서는 C언어나 C++, Java처럼 break;를 생략해서
바로 다음 case로 이동하는 것이 허용되지 않습니다.
이는 잠재적 오류 가능성을 줄이고 코드의 신뢰성을 높이기 위한 조치입니다.
여러 값을 같은 처리로 묶고 싶다면, case라벨을 연달아 쓰는 방식으로 표현합니다.
[C#에서 허용되지 않음]
int x = 1;
switch (x)
{
case 1:
Console.WriteLine("1");
// 여기서 바로 다음 case로 이동하려고 하면 → 컴파일 오류
case 2:
Console.WriteLine("2");
break;
}
[C#에서 허용되는 것]
int x = 1;
switch (x)
{
case 1: // case 블록이 비어 있음
case 2:
Console.WriteLine("1 또는 2입니다.");
break;
}
C# 8.0부터는 코드가 훨씬 간결하고 명확하게 사용할 수 있습니다.
기존 switch문과 동일하게 작동하면서도 훨씬 간결하고 가독성이 좋습니다.
단, '값을 만들어내는 식'이기 때문에 각 분기에서 반드시 하나의 값을 반환해야 합니다.
[코드]
string season = "봄";
string message = season switch // 더 간결해진 switch 식
{
"봄" => "꽃놀이하러 갑시다!",
"여름" => "시원한 바다로 떠나요!",
"가을" => "단풍 구경하기 좋아요!",
"겨울" => "따뜻한 코코아 한 잔 어떠세요?",
_ => "어떤 계절인지 잘 모르겠어요!" // default: 대신 _ 사용
};
Console.WriteLine(message);
[실행 결과]
꽃놀이하러 갑시다!