본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티와 C# 개념 정리_Concept Summary

유니티와 C# 개념 정리_010_조건문 switch

switch

switch(스위치)문에 대해서는 이전에 작성한 글도 있으므로 참고한다.(유니티07_C#_03_제어문)

 

switch(스위치)문은 if~else문 처럼 조건을 검사할 수 있지만 몇 가지 제약이 있다.

 

  • 같은지 비교만 할 수 있다.
  • 하나의 변수만 비교할 수 있다.
  • 변수를 문자와만 비교할 수 있다.(다른 변수와 비교 안됨)

 

스위치문의 예는 다음과 같다.

유니티에서 아래 스크립트(Switch.cs)를 만든다.

 

스위치문의 기본 구조는 위 코드에서 분홍색 키워드로 이루어져 있다.

 

5번줄: int 타입의 number(숫자)라는 변수를 정의하고 초기값으로 5를 저장한다.

9번줄: switch문으로 비교한다. 괄호안에 비교할 대상(변수)를 넣는다.

11번줄: case(케이스, 경우) 키워드로 비교할 숫자를 지정한다.

number는 int(정수)타입이므로 비교 대상을 숫자로 넣는다.

12번줄: number값과 0을 비교해서 같다면 (같은 경우라면) print메서드에 있는 문자열(변수값은 0이다)을 출력한다.

13번줄: case문의 끝에 break 키워드로 마치면, 다른 case는 비교하지 말고 바로 switch문의 끝(22번줄)으로 점프하게 된다. 만약 break를 붙이지 않으면 다음 case로 넘어가지만 이때는 실행코드(12번줄)도 삭제해야 한다.

19번줄: 나열한 case에 해당하지 않는 경우가 true(참)이면 default(디폴트, 기본)에서 지정할 수 있다.

 

스크립트를 저장한 후 실행하면 아래와 같은 결과가 나올것이다.

 

둘 이상의 case가 같은 코드를 실행해야 할 때는 아래와 같이 할 수 있다.

 

19번줄의 경우와 20번줄의 경우는 21번줄의 코드를 실행한다.

 

switch문은 if문을 대신할 수 있다고 하지만 제약이 많아서 별 쓸모가 없어 보인다.

어떤 경우에 유용하게 사용할 수 있는가?

 

예를 들어 변신하는 robot(로봇)이 있다고 하자.

5번줄: string타입의 robot 변수를 boat(보트)로 초기화한다.

6번줄: bool타입의 변수 onLand(땅 위)를 false(거짓)으로 초기화 한다.

 

switch문으로 robot변수의 값을 비교하는 코드를 작성할 수 있다.

각 케이스에 맞는 코드를 작성하고 if문을 추가해서 더 자세하게 표현할 수 있다.

 

32번줄: case 외의 경우에 적용할 default(디폴트)값은 robot변수의 값을 나타내도록 한다.

$ 기호는 문자열 안에서 변수값을 표현할 때 사용할 수 있다.

$"문자열 {변수명} " 모양으로 표현하면 {변수명} 위치에 변수값이 나타난다.

$기호로 시작하는 문자열을 보간된 문자열이라고 한다.

문자열에 대한 내용은 이전 글(유니티34_C#_19_String)을 참고한다.

 

위 코드를 저장하고 실행하면 다음과 같은 결과를 볼 수 있다.

위 코드에서 robot 값이 boat이고, onLand 값이 false이다.

if조건문에서 !onLand는 not false, 즉 true(참)가 되므로 "항해하다"가 출력된 것이다.

 

만약 string robot = "rocket" 으로 바꾼 후 실행하면 default 케이스가 출력될 것이다.

참고로 "rocket으로 변신하다 "라는 문자열을 나타내려면 다음과 같이 할 수 있다.

print ( $"{robot}으로 변신하다" )

print ( robot + "으로 변신하다" )

 

둘 다 결과는 같지만 문자열 안에 변수가 많은 경우 $기호를 사용하는 것이 편하다.

 

끝.

Wraven...