지난 시간에 배운 if문에 이어서, switch문을 배워보도록 하겠습니다.
C#에 처음 입문하시거나 프로그래밍에 처음 입문하시는 분들이 배우시기 쉽게 하기 위해서, 간단한 설명과 코드 사용법만을 알려드리는 점 참고 부탁드리겠습니다.
조금 더 전문적이게 사용하는 부분은 나중에 게임을 만들어서 그 게임을 어떻게 만드는가에 대해서 포스팅할 때 차근차근 설명해드리도록 하겠습니다.
- switch문은 switch와 case 또는 default를 이용해서, switch에서 얻은 값을 통해서, case를 비교해서,
있다면 해당 case문 안에 있는 코드를 실행하고, 없다면, default문을 실행하는 조건문입니다.
저는 일단, SwitchTest라는 오브젝트와 스크립트를 만들어서, SwitchTest 오브젝트에 컴포넌트로 사용하도록 만들어놨습니다. 해당 부분은 여러분께서
아무렇게나 이름을 지정하고 만드셔도 상관없다는 점 알려드리고 시작하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class SwitchTest : MonoBehaviour { public int number = 5; void Start() { switch(number) { case 0: Debug.Log("number와 0은 같습니다."); break; case 1: Debug.Log("number와 1은 같습니다."); break; case 2: Debug.Log("number와 2는 같습니다."); break; case 3: Debug.Log("number와 3은 같습니다."); break; case 4: Debug.Log("number와 4는 같습니다."); break; case 5: Debug.Log("number와 5는 같습니다."); break; default: Debug.Log("number에 해당하는 숫자가 case로 지정되어 있지 않습니다."); break; } } } |
일단 이것이 기본적인 switch문 코드입니다. 보시면 대략 어떤 코드인 지 감이 오실거라 생각이 듭니다.
number라는 값을 일단 5로 설정해놓고, Start 함수에서, 실행을 해봅니다. 그렇다면 어떤 로그로 출력이 될까요?
정답은 number와 5는 같습니다. 입니다.
순서는 이렇게 진행이 됩니다.
1. Start() 실행 -> 2. switch ( param ) [ param ]에 들어가 있는 값이 어떤 값인 지를 봅니다.
-> 3. 그 다음에, case 문에 해당 값이 있는 지를 살펴봅니다. -> 4. 있다면, 해당 case문에 있는 코드를 실행하고 없다면, default문 안에 있는 코드를 실행합니다.
C언어에서 switch문은 정수값으로만 case문을 실행하게 되어있습니다. ( 문자열을 정수형으로 변경해서, 그 정수값에 따라 비교하는 방법은 있다고 합니다. )
그런데, C#에서는, case "문자열" 을 사용하면, 해당 문자열에 따라 case문이 실행되는 게 가능해졌습니다. 제가 기억하기로는 java도 가능한 걸로 알고 있습니다.
한번 해볼까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class SwitchTest : MonoBehaviour { public string str = "하하"; void Start() { switch(str) { case "하하": Debug.Log(str); break; case "호호": Debug.Log(str); break; default: Debug.Log("하하도 호호도 아닙니다."); break; } } } |
이렇게 실행하게 되면, 하하라는 문자가 출력하게 되겠죠? 그런데, Debug.Log(str)이 너무 비효율적으로 사용되는 것 같습니다.
"하하" 또는 "호호" 이면 str이란 변수에 있는 문자열이 무엇인 지만 알면 되는건데,
굳이 Debug.Log(str)을 각각 case문에 사용 할 필요가 있을까요? 그래서 변경을 해보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class SwitchTest : MonoBehaviour { public string str = "하하"; void Start() { switch(str) { case "하하": case "호호": Debug.Log(str); break; default: Debug.Log("하하도 호호도 아닙니다."); break; } } } |
하하에는 break문을 없앴습니다. 이렇게 되면, str에 저장되어 있는 값이 하하이거나 호호이면 Debug.Log(str)을 출력하게 됩니다.
상황에 따라, case문에 break를 없애고 사용하시면 되십니다.
자 이렇게 2번째 조건문인 switch문에 대해서 알아봤습니다.
if문을 쓰느냐 switch문을 쓰느냐는 코드를 작성하시는 분들이 편하신대로 작성하시면 됩니다.
뭔가 구체적인 것을 조건으로 달고 싶으실 때엔 if문을, 변수에 있는 값에 따라 다른 코드를 실행시키게 하고 싶다면, switch문을 사용하시는 것을 추천드립니다.
다음 시간에는, if문에서 설명드리지 못한, 연산자에 대해서 알아보도록 하겠습니다.
지금까지 Base Of Coding이였습니다. 감사합니다.