본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티unity로 게임 만들기

유니티07_C#_03_제어문_if_switch

참고: 2021년 1월14일에 Unity2019.4.17f1 버전의 LTS버전이 나왔다는 알림이 와서 Unity2019.4.18f1으로 업그레이드 했다. 먼저 LTS 버전이 무엇인지 알아보았다.

 

유니티로 개발할 때 버전간에 호환성 문제가 많은 모양이다. 새 버전으로 업그레이드 한 후에 기존 프로젝트의 유지 보수에 문제가 생길 수 있는 것 같다. 그래서 그 대안으로 LTS(장기 지원)버전이라는 것을 내놓았다고 한다. 이 버전은 새로운 기능을 탑재하지 않고 버그 등과 같은 프로젝트 유지보수에 영향이 없는 수정만 해서 출시한 버전이다.

 

제어문(Control statement)

 

이번에는 제어문(Control statement)에 대해 알아본다.

 

프로그램 코드는 위에서 부터 순서대로 실행한다.

그런데 필요에 따라 어떤 조건에 맞을 때만 실행하거나 반복해야 할 경우가 있다.

이런 작업에 사용하는 것이 제어문이다.

제어문은 특정한 조건이 맞을 때만 실행하는 코드이다.

 

특정한 조건이란 예를 들어

'만약 a 값이 1이면 b를 실행하라'

'값이 5보다 작을 때는 계속 반복해서 b를 실행하라' 등이 있다.

 

제어문은 조건문(conditional statement)과 반복문(loop statement)이 있다.

조건문에 사용하는 명령어는 if , switch 가 있고

반복문에 사용하는 명령어는 for , foreach , while 이 있다.

 

*if : 이프, 만약~라면

*switch : 스위치, 바꾸다

*for : 포, ~(기간)동안

*foreach : 포이치, 각각에 대하여

*while : 와일, ~하는 동안

 

조건문(conditional statement)

 

1. if문

 

if문으로 조건을 만드는 가장 간단한 조건식은 다음과 같다.

 

if(조건식)

{

    처리

}

 

조건식이 참(true)이면 중괄호 안의 처리 코드를 실행하고 

거짓(false)이면 다음 코드로 넘어간다.

 

if문에서 사용할 수 있는 연산자 중에서 '같다'를 표현하는 연산자는 == 이다.

'같지 않다'!= 이다.

 

예를 들어 if(a == 1)은 다음과 같은 뜻이다.

'만약 a가 1과 같다면'

'만약 a가 1이면'

 

if(a != 1)은 다음과 같은 뜻이다.

'만약 a가 1과 같지 않다면'

'만약 a가 1이 아니면'

 

이런 연산자를 관계 연산자(Relational Operator)라고 한다.

왼쪽과 오른쪽 두 관계를 비교한다.

 

== 왼쪽과 오른쪽 값이 같으면 참

!= 왼쪽과 오른쪽 값이 다르면 참

> 왼쪽이 오른쪽 값보다 크면 참

< 왼쪽이 오른쪽 값보다 작으면 참

>= 왼쪽이 오른쪽 값보다 크거나 같으면 참

<= 왼쪽이 오른쪽 값보다 작거나 같으면 참

 

위 코드는 if조건문의 조건이 참이므로 실행하면 체력이 10 회복될 것이다.

 

1-2. if else문

if문에서 조건이 참이면 실행하고 그렇지 않으면(거짓) 다음 코드로 넘어간다.

이런 경우, 조건이 거짓일 때도 무엇을 실행하게 하려면 else를 사용하면 된다.

 

if A else B 문의 뜻은 다음과 같다.

(만약 ~라면) A실행 (그렇지 않으면) B 실행

 

if else문은 if조건식이 참일 때와 거짓일 때 각각 다르게 처리하는 구문이다.

 

코드는 다음과 같이 작성한다.

 

if (조건식)

{

    처리 A

}

else

{

    처리 B

}

 

예를 들어 health(건강) 값이 90 이상이면 '공격!'을 출력하고,

그렇지 않으면 '방어'를 출력하라는 코드를 작성해 보자.

 

9번줄에서 변수 health를 정의하고 초기값으로 100을 설정했다.

10번줄17번줄에서 if else조건문을 작성한다.

위 코드에서 현재 if 조건식이 '참'이므로 실행하면 '공격!'이 출력된다.

 

조건식이 여러 개일 때는 다음과 같이 if와 else 사이에 else if (또한 ~라면) 문을 작성한다.

 

if (조건식a)

{

    처리 A

}

else if (조건식b)

{

    처리 B

}

else

{

    처리 C

}

 

 

위에서 아래로 순서대로 조건식을 검사하다가 '참'인 조건식이 나오면 중괄호 부분을 '처리'하고 그 다음 조건식은 실행하지 않고 종료한 후 다음 코드로 넘어간다.

else if문은 원하는 만큼 삽입할 수 있으며 마지막 else문은 생략할 수 있다.

 

예를 들어 다음과 같은 코드를 작성하려고 한다.

 

health값이 50 이하이면 "도망!"을 출력하고

또한 90 이상이면 "공격!"을 출력하고

그렇지 않으면 "방어!"를 출력하라

 

위 코드에서 현재 health값은 70 이다.

10번줄 if조건식은 거짓이므로 다음으로 넘어간다.

14번줄 else if 조건식도 거짓이므로 다음으로 넘어간다.

지금까지 조건식이 모두 거짓이었으므로 

18번줄 else(그렇지 않으면) 중괄호 안에 있는 코드를 실행하게 된다.

 

 

2. switch문

switch(스위치)문은 조건이 여러 경우(case)의 값을 가질 수 있고 각 값별로 처리할 코드를 만들 수 있다.

해당 케이스를 처리한 후에 switch문을 빠져나가기 위해서 break 키워드를 사용한다.

 

기본 형태는 다음과 같다.

 

switch ( 조건 )

{

    case 1:

        조건이 1일 때 처리할 코드

        break;

    case 2:

        조건이 2일 때 처리할 코드

        break;

    default:

        조건이 1, 2가 아닐 때 처리할 코드

        break;

}

 

 

예를 들면 다음과 같다.

 

int a = 1;

switch (a < 2)

{

    case true:

        Debug.Log("일등");

        break;

    case false:

        Debug.Log("일등은 아니다.");

        break;

    default:

        Debug.Log("등외");

        break;

}

 

다른 예는 다음과 같다.

 

int a = 1;

switch (a)

{

    case 1:

        Debug.Log("일등");

        break;

    case 2:

        Debug.Log("이등");

        break;

    case 3:

        Debug.Log("삼등");

        break;

    default:

        Debug.Log("등외");

        break;

}

 

예를 하나 더 만들어 본다.

 

int day = 3;

switch (day)

{

    case 6:

        Debug.Log("오늘은 토요일");

        break;

    case 7:

        Debug.Log("오늘은 일요일");

        break;

    default:

        Debug.Log("열심히 공부하자!");

        break;

}

 

위의 예 처럼 switch문은 조건에 불리언 타입(참,거짓) 뿐만 아니라 다른 타입도 사용할 수 있다.

반면에 if문은 조건에 불리언 타입만 사용할 수 있다.

 

하지만 if문은 조건에 범위를 넣어서 제어할 수 있지만 switch문은 주로 변하지 않는 값(상수) 또는 정해진 값에만 사용한다.

예를 들어 어떤 값을 받아서 80점 이상이면 "1등급", 70점 이상이면 "2등급", 60점 이상이면 "3등급" , 60점 미만이면 "등외"를 출력하는 코드를 switch문으로 작성하려고 하면 안되는건 아니지만 머리를 굴려야 하고 만든 코드가 깨끗하지 못한 모양으로 느껴질 수도 있다.

 

그러므로 if문과 switch문은 서로 비슷하므로 어떤 경우에 어떤 조건문을 사용하는 것이 좋은지 판단할 수 있어야 한다.

 

변수의 범위

 

변수는 선언한 줄을 포함하는 중괄호 안에서만 사용할 수 있다.

 

위 코드는 변수x를 int타입으로 선언하고 그 값을 1로 초기화했다.

그리고 만약 x가 1이면 x값을 출력하고 x값을 1 증가한다.

그리고 x값을 출력한다.

 

위 코드에서 9번줄에 선언한 변수x는 그것을 포함하는 8번과 16번줄의 중괄호 안에서 사용할 수 있다.

그래서 위 코드를 실행하면 다음과 같이 출력된다.

 

만약 아래와 같은 코드라면 어떻게 될까?

 

if 조건식이 '참'이면 변수y를 선언하고 2로 초기화한다.

그리고 x값을 출력한 후 1 증가하고, y를 출력한 후 y값을 1증가한다.

그 다음, if문 밖으로 나와서  x, y값을 출력한다.

 

실행해 보면 아래와 같은 에러가 뜬다.

비주얼 스튜디오 편집기에서 보는 바와 같이 19번 줄 변수 y는 색이 다르다는 것을 알 수 있다.

 

12번 줄에 선언된 변수y는 이 변수를 포함하는 중괄호인 11번~17번줄 안에서만 사용할 수 있다.

18번 줄 부터는 if문을 벗어난 상태다.

그러므로 19번줄 변수y는 사용 범위를 벗어났기 때문에 에러가 난 것이다.

 

즉, if문 내에서 선언한 변수는 if문 바깥에서는 사용할 수 없다는 것을 명심하자.

 

 

13번줄은 지우거나 위와 같이 실행되지 않도록  '주석 // '으로 처리하고 변수y를 10번줄에 선언하면 20번 줄 y가 같은 색으로 변한 것을 볼 수 있다. 이제 변수y의 범위는 8~21번줄 이므로 이번에는 정상적으로 출력될 것이다.

 

끝.

Wraven...