C#에서 보이는 분기문 특징을 알아본다.
if-elseif-else 문
C/C++와 용법이 같다.
switch 문
일반적인 사용법은 C/C++와 용법이 같다.
C#에서 모든 자료형을 담을 수 있는 object 자료형이 있었는데,
object 변수에 대한 swtich 문 : object가 갖고 있는 값의 실제 타입으로 분기시킬 수 있다.
또한 string 값으로부터 switch 문을 사용해 분기 시키는 것도 가능하다.
namespace HelloWorld
{
class MainApp
{
static void Main(string[] args)
{
object obj = "str";
switch (obj)
{
case int i:
Console.WriteLine($"{i}는 int 형식입니다.");
break;
case float f:
Console.WriteLine($"{f}는 float 형식입니다.");
break;
default:
Console.WriteLine($"{obj}는 모르는 형식입니다.");
break;
}
Read();
}
}
}
case 문장에서 when 부사를 이용하여 추가 조건을 만들 수 있다.
namespace HelloWorld
{
class MainApp
{
static void Main(string[] args)
{
object obj = "str";
switch (obj)
{
case int i when i > 0:
Console.WriteLine($"{i}는 int 형식입니다.");
break;
case float f when f > 0:
Console.WriteLine($"{f}는 float 형식입니다.");
break;
default:
Console.WriteLine($"{obj}는 모르는 형식입니다.");
break;
}
Read();
}
}
}
switch 식의 사용
코드의 간결성을 높여 똑같은 switch 문을 다음과 같이 표현 가능하다. (C# 8.0 이상)
namespace HelloWorld
{
class MainApp
{
enum ACT { ATTACK, DEFENSE, PATROL };
static void Main(string[] args)
{
ACT myAct = ACT.ATTACK;
string key;
//switch (myAct)
//{
// case ACT.ATTACK:
// key = "A";
// break;
// case ACT.DEFENSE:
// key = "D";
// break;
// case ACT.PATROL:
// key = "P";
// break;
// default:
// key = "INVALID";
// break;
//}
key = myAct switch
{
ACT.ATTACK => "A",
ACT.DEFENSE => "D",
ACT.PATROL => "P",
_ => "INVALID"
};
Read();
}
}
}
foreach 문
C++의 range 기반 for 문과 유사하다. 각 배열의 원소를 처음부터 끝까지 순회하는 방법을 제공한다.
namespace HelloWorld
{
class MainApp
{
static void Main(string[] args)
{
int[] arr = new int[] { 0, 1, 2, 3, 4 };
foreach(int a in arr)
{
Console.WriteLine(a);
}
Read();
}
}
}
점프문
break, continue, goto, return, throw 등
C++에서 goto문도 비선호되었는데 코드 흐름을 복잡하게 만든다는 이유로 역시 선호되지 않는다.
중첩 for문을 한번에 나올때 사용될 수 있다.
namespace HelloWorld
{
class MainApp
{
static void Main(string[] args)
{
for(int i =0; i < 100; ++i)
{
for(int j = 0; j < 100; ++j)
{
for(int k = 0; k < 100; ++k)
{
if (k == 50)
goto EXIT_LOOP;
}
}
}
EXIT_LOOP:
Console.WriteLine("Exit Loop");
Read();
}
}
}