switch 문을 많이 활용하시나요? 저는 개인적으로 switch문을 많이 활용하지 않는 것 같습니다 (계속 if, else if, else if... 이어지며 못생긴 코드가 되어버리지요;;;). 그러다가 최근에 Type 비교를 하는 코드를 작성하다가 Swith문으로 Type 을 비교할 수 있을까? 라는 의문이 들어서 검색을 해보다가 C# 7 부터 가능한 Swith 문의 엄청나게 유용한 기능을 알게되었습니다. 바로 Switch문으로 Type이 같은지 확인을 할 수 있을 뿐만 아니라 더 나아가 그 비교된 Type으로 형변환 시킨 형식으로 변수를 활용할 수 있더라고요.
먼저 예시로 과일을 먹는 상황이라고 생각을 하고 여러 과일들 클래스를 만들어보겠습니다. 모든 과일은 IFruit 인터페이스를 구현하고 있습니다.
public interface IFruit
{
void Eat();
}
public class Apple : IFruit
{
public void Eat()
{
Console.WriteLine("You are eating an apple");
}
public void AppleSpecificMethod()
{
Console.WriteLine("It's so sweet");
}
}
public class Orange : IFruit
{
public void Eat()
{
Console.WriteLine("You are eating an orange");
}
public void OrangeSpecificMethod()
{
Console.WriteLine("It's so fresh");
}
}
public class Peach : IFruit
{
public void Eat()
{
Console.WriteLine("You are eating a peach");
}
public void PeachSpecificMethod()
{
Console.WriteLine("It's so peachy");
}
}
그리고 아무 과일이나 랜덤으로 골라서 먹는다고 했을 때, Swith문을 활용해서 해당 과일의 고유의 Method를 실행하는 코드입니다. (ex. AppleSpecificMethod())
class EatFruitProgram
{
private static List<IFruit> fruits = new List<IFruit>();
static void Main(string[] args)
{
fruits.Add(new Apple());
fruits.Add(new Orange());
fruits.Add(new Peach());
var fruit = GetRandomFruit();
EatFruit(fruit);
}
private static IFruit GetRandomFruit()
{
int randomIndex = new Random().Next(0, fruits.Count);
return fruits[randomIndex];
}
private static void EatFruit(IFruit fruit)
{
fruit.Eat();
switch (fruit)
{
case Apple apple:
apple.AppleSpecificMethod();
break;
case Orange orange:
orange.OrangeSpecificMethod();
break;
case Peach peach:
peach.PeachSpecificMethod();
break;
}
}
}
위 코드에서 주목해야할 부분은 바로 EatFruit(...) 함수에서 Switch 문 case 마다 각 Type의 비교뿐만 아니라 해당 Type으로 Type Casting을 한 변수처럼 활용이 가능한 부분입니다.
Switch 문의 엄청난 매력을 하나 발견하게된듯합니다.
'Unity & C#' 카테고리의 다른 글
[유니티] 간단 실험 : for loop in an update vs. multiple updates (0) | 2022.07.06 |
---|---|
[유니티] Unity Profiler 사용하기 (0) | 2022.07.05 |
[c#] Indexer [인덱서] 활용해보기 (0) | 2022.05.08 |
CustomEditor 활용하기 - Inspector Button만들기 (0) | 2022.04.06 |
CustomEditor 활용하기 - bool 값으로 variable 보여주기 (0) | 2022.04.03 |