![[Unity_C#] Switch문 & Switch 식](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfwZZX%2FbtrKcwUcZwi%2FUjLBtEUodmr81xkkgk3ip1%2Fimg.png)
요즘 C# 책을 사서 공부중인데, 생각보다 내가 모르는 부분이 정말 많다는것을 느꼈다.
책을 통해 Switch에 대해 새로 알게된 부분을 정리해보려고 한다.
Switch 문
스위치문은 여러가지의 경우의 수를 한번에 판단하기 위해 많이들 써보셨을거라고 생각한다.
int a = 0;
switch(a)
{
case 0:
Console.Write("a는 0입니다.");
break;
case 1:
Console.Write("a는 1입니다.");
break;
default:
break;
}
a의 값에 따라서 case로 설정해둔 조건에 의해 코드가 실행된다.
조건식은 정수와 문자열 형식 두가지만 가능하다.
데이터형식 조건
C# 7.0부터는 switch문에 데이터 형식을 조건으로 쓸 수 있다고한다.
가장 최신 유니티버전은 C# 9.0까지 지원하기 때문에 유니티에서도 쓸 수 있는 기능이다.
C# 컴파일러 - Unity 매뉴얼 (unity3d.com)
static void Main(string[] args)
{
object a = "문자";
switch(a)
{
case int i:
Console.WriteLine("a는 int 입니다.");
break;
case string s:
Console.WriteLine("a는 string 입니다.");
break;
default:
Console.WriteLine("a는 다른 형식입니다.");
break;
}
}
데이터 형식을 조건으로 쓸때는 데이터형식 옆에 반드시 식별자를 붙여주어야 한다.
라고 책에 적혀있긴한데 안적고 실행해봐도 실행은 됐다.
유니티 2022.1.5f1 버전으로 실험을 해봤는데 아주 잘 작동한다.
switch의 when절
C#의 swtich문에는 when절 이라는것을 이용하여 추가적인 조건을 검사 할 수 있다.
스위치를 그렇게 많이 썼는데 처음 알았다.
static void Main(string[] args)
{
object a = 10;
switch(a)
{
case int i when i < 20:
Console.WriteLine("a는 20보다 작습니다.");
break;
case string s:
Console.WriteLine("a는 string 입니다.");
break;
default:
Console.WriteLine("a는 다른 형식입니다.");
break;
}
when절의 조건이 참이기 때문에 지정해놓은 코드가 실행됐다.
a를 20 이상으로 바꾸면 조건이 거짓이 되기 때문에 바로 디폴트로 설정해놓은 코드가 실행된다.
Switch 식
switch 식 - C# 참조 | Microsoft Docs
마소의 설명을 보니 C# 8.0부터 지원하는것 같다.
switch문과 식의 차이는 식은 어떤 계산을 해서 결과를 내놓고,
문은 결과를 내든 그렇지 않든 어떤 일을 하는것이 차이라고 한다.
이번엔 바로 유니티로 실험을 해봤다.(유니티 2022.1.5f1 버전)
int Height = 180;
void Start()
{
string grade = Height switch
{
180 => "A등급",
170 => "B등급",
160 => "C등급",
_ => "D등급",
};
Debug.Log(grade);
}
키에 따라서 등급을 나누는 코드를 작성했다.
스위치 식은 값을 받을 변수를 선언하고, 값을 판단할 변수와 그 뒤에 바로 swtich 를 적어두면 된다.
' case : ' 는 ' => '로 바꿔주면된다.
break대신에 ' , ' 를 찍어주고,
Default는 ' _ ' 언더바로 대체한다.
height를 180으로 설정해두었기 때문에 A등급으로 잘 나온다.
Switch식에서도 when절을 활용해보기 위해 face라는 변수를 선언했다.
Height이 180이지만 face가 "ugly"라면 F등급이 나오는 when절을 작성했다.
int Height = 180;
string face = "ugly";
void Start()
{
string grade = Height switch
{
180 when face.Equals("ugly") => "F등급",
180 => "A등급",
170 => "B등급",
160 => "C등급",
_ => "D등급",
};
Debug.Log(grade);
}
얄짤없이 F등급이 나왔다.
실무에서는 어떨지 모르지만,,
개인적으로 생각해봤을때 데이터형을 switch문의 조건으로 쓸 수 있는것은
1.object타입을 직접 선언해서 써본적이 거의 없음. (박싱 언박싱 때문에 기피하게 됨)
2.변수를 object타입이 아닌 명시적으로 사용할 데이터형식을 선언한다면 쓸 일이 없을거같아서..
두가지의 이유로 어떠한 곳에 쓰일지 감이 안잡힌다.
근데 알아두면 언젠가 쓸 일이 있지 않을까 싶다.
switch식과 when절은 상당히 유용할 것 같다.
나중에 써먹어 봐야지..
'프로그래밍 공부 > C# 프로그래밍' 카테고리의 다른 글
[C#] 메소드 오버로딩,가변 개수의 인수, 명명된 인수, this() 생성자 (0) | 2022.08.24 |
---|---|
[C#] ref 와 out 매개변수 한정자 (0) | 2022.08.24 |
클래스와 구조체 / 배열과 리스트 / awake와 start의 차이 (0) | 2022.08.11 |
가비지 컬렉터(garbage collector) (0) | 2022.08.08 |
Object 형식과 박싱 & 언박싱 (0) | 2022.08.08 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!