03강) C# 프로그래밍 기초2 |
지난 시간에 이어서 C# 프로그래밍의 기초에 대해서 더 알아봅시다.
C#) 모든 문장의 끝은 세미콜론(;) |
모든 구문의 끝에는 세미콜론이 있어야합니다.
컴퓨터 컴파일러가 구문의 끝을 판단하기 때문이죠.
C#) 열렸으면( 닫아야죠) |
무슨 말이냐 하면
이렇게 열리고 닫히는게 "쌍"을 이뤄야 한다는 사실!!
C#) 관계 연산자 |
참과 거짓 즉, 옳고 그름과 상당히 관련 깊은 연산자입니다.
(특히 bool과 연관성이 깊습니다.)
연산자 | 기능 |
< | Ex) A < B A가 B보다 작은가? |
> | Ex) A > B A가 B보다 큰가? |
<= | Ex) A <= B A가 B보다 작거나 같은가? |
>= | Ex) A >= B A가 B보다 크거나 같은가? |
== | Ex) A == B A와 B가 같은가? |
!= | Ex) A != B A와 B가 같지 않은가?(다른가?) |
저 조건을 만족을 한다면 "true", 만족하지 않으면 "false"를 반환하게 됩니다.
예제를 통해서 확인하여 봅시다.
using UnityEngine; public class TestScript : MonoBehaviour { int A, B; void Start () { A = 5; B = 7; Debug.Log("A < B : " + (A < B)); Debug.Log("A > B : " + (A > B)); Debug.Log("A <= B : " + (A <= B)); Debug.Log("A >= B : " + (A >= B)); Debug.Log("A == B : " + (A == B)); Debug.Log("A != B : " + (A != B)); } }
C#) 논리 연산자 |
이것 역시 참과 거짓 즉, 옳고 그름과 상당히 관련 깊은 연산자입니다.
연산자 | 기능 |
&& | Ex) A && B (AND 연산) A와 B가 모두 true이면 true |
|| | Ex) A || B (OR 연산) A 혹은 B가 true이면 true |
! | Ex) !A (NOT 연산) A가 true이면 false, false이면 true |
(|는 shift+\ 입니다.)
이 논리 연산자도 예제를 통해서 알아봅시다.
using UnityEngine; public class TestScript : MonoBehaviour { int A, B; void Start () { A = 12; B = 7; Debug.Log("(A > B) && (A > 10) : " + ((A > B) && (A > 10))); Debug.Log("(A == B) || (B + 6 > A) : " + ((A == B) || (B + 6 > A))); Debug.Log("!(A * 2 < (B + 9) * 2) : " + !(A * 2 < (B + 9) * 2)); } }
C#) 조건문(분기문, 제어문) |
C#에서 조건문은 크게 2가지로 구성되어 있습니다.
if문과 switch문으로 말이지요.
조건문 이란? |
조건문, 분기문, 제어문이라는 말을 많이 쓰게 되는데, 조건문은 제어문에 속하는 프로그래밍 문법입니다. 어떠한 조건에 만족했을 시에 실행되는 문을 "조건문"이라고 합니다. 그 조건문에 의해 분기가 나뉘어 졌을시에 "조건 분기문"이라고 합니다. |
if문 |
if (어떠한_조건) { 조건에_만족했을_때_실행되는_구간; } else { 조건에_만족하지_않았을_때_실행되는_구간; } |
if문은 처음에 조건을 겁니다. 그리고 그 조건이 만족하면 if문 다음에 {}로 감싸여 있는 구문들을 실행하게 됩니다. 만약에 그 조건을 만족하지 않으면 else문 다음에 {}로 감싸여 있는 구문들을 실행하게 됩니다. |
if문을 예제를 통해서 더 배워봅시다.
using UnityEngine; public class TestScript : MonoBehaviour { int A, B; void Start () { A = 21; B = 13; if(A > B) { Debug.Log("A는 B보다 큽니다."); } else { Debug.Log("A는 B보다 작습니다."); } } }
그런데 여기서 한가지 모순이 발견됩니다.
만약에 A와 B가
A = 21; B = 21;
이렇게 같다면 어떻게 될까요?
확인을 위해서 코드를 다음과 같이 수정하고 확인하였습니다.
using UnityEngine; public class TestScript : MonoBehaviour { int A, B; void Start () { A = 21; B = 21; Debug.Log("A : " + A); Debug.Log("B : " + B); if(A > B) { Debug.Log("A는 B보다 큽니다."); } else { Debug.Log("A는 B보다 작습니다."); } } }
그 결과!!
이러한 모순을 도출하게 됩니다.
이유는 간단합니다.
조건이 단 두개뿐이기 때문이죠.
(A가 크거나, 혹은 그렇지 않거나)
이럴때를 위해서 "조건 분기문"인 "else if"가 있습니다.
if문과 else if문 |
if (어떠한_조건) { 조건에_만족했을_때_실행되는_구간; } else if (어떠한_조건2) { 조건2에_만족했을_때_실행되는_구간; } else if (어떠한_조건n) { 조건n에_만족했을_때_실행되는_구간; } else { 조건에_만족하지_않았을_때_실행되는_구간; } |
위와 같이 여러 조건을 줄 때 else if를 이용하여 조건을 더 준다. (else if는 원하는 만큼 정의 가능) |
이제 아까 위에서 봤던 모순을 없앨 시간입니다.
using UnityEngine; public class TestScript : MonoBehaviour { int A, B; void Start () { A = 21; B = 21; Debug.Log("A : " + A); Debug.Log("B : " + B); if(A > B) { Debug.Log("A는 B보다 큽니다."); } else if (A == B) { Debug.Log("A와 B는 같습니다."); } else { Debug.Log("A는 B보다 작습니다."); } } }
A와 B가 같아질 조건을 넣어주면 됩니다.
그럼 모순이 사라지게 됩니다.
switch문 |
switch(판단에_쓰일_변수) { case 조건1: { 조건1_일때_실행될_구문; break; } case 조건2: { 조건2_일때_실행될_구문; break; } case 조건n: { 조건n_일때_실행될_구문; break; } default: { 위의_조건들이_전부_성립되지_않았을때_실행될_구문; break; } } |
switch문은 말 그대로 "스위치"라고 생각하시면 됩니다. "판단에 쓰일 변수"의 값에 따라서 조건을 찾게 됩니다. if문과의 차이점이 있다면 if문은 "범위 같은 조건(불 특정 대상)"에서 사용이 편리하고, switch문은 "일정 값(특정 대상)"에서만 사용이 가능합니다. 주의할 점은 꼭 마지막에 "break"를 걸어줄 것!! |
예제를 통해서 알아봅시다.
public class TestScript : MonoBehaviour { int A; void Start () { A = 10; Debug.Log("A : " + A); switch(A) { case 5: { Debug.Log("A는 5이다."); break; } case 10: { Debug.Log("A는 10이다."); break; } case 15: { Debug.Log("A는 15이다."); break; } default: { Debug.Log("아님 말고"); break; } } } }
위의 예제는 A의 값에 따라서 결과값이 달라지는 프로그램입니다.
즉, case 옆에 달려있는 값이 A와 같으냐 다르냐를 판단하게 됩니다.
이렇게 되는 것이죠.
C#) 반복문(제어문) |
C#에서 반복문은 크게 2가지로 나뉩니다.
for문과 while문으로 나뉘지요.
반복문 이란? |
어떤 특정 조건내에서 그 조건이 성립할 시에 계속 반복하는 것. |
for문 |
for(조건에_쓰일_변수의_초기값; 반복_조건; 변수값_변화) { 반복할_구문들; } |
for문은 조건판단에 사용할 변수의 초기값을 먼저 지정을 합니다. 그리고 반복을 언제까지 할건지 조건을 세우고 거기에 맞추어 변수값을 변화시킵니다. |
무슨 말인지 모르겠다면 예제를 보면서 익혀봅시다.
using UnityEngine; public class TestScript : MonoBehaviour { int total; void Start () { total = 0; // 1 ~ 100까지 더하는 프로그램 for(int i = 0; i <= 100; i++) { // for문에 사용할 변수 i를 선언과 동시에 0이라는 값으로 초기화! // i값이 100보다 작거나 같을때 까지 반복을 실행할거임! // for문이 한번 끝날때 마다 i값을 1증가 시킬거임! total += i; // i의 값을 total에 더함 } Debug.Log("1부터 100까지 더한 값 : " + total); } }
위의 프로그램은
using UnityEngine; public class TestScript : MonoBehaviour { int total; int i; void Start () { total = 0; // 1 ~ 100까지 더하는 프로그램 for(i = 0; i <= 100; i++) { // for문에 사용할 변수 i를 선언과 동시에 0이라는 값으로 초기화! // i값이 100보다 작거나 같을때 까지 반복을 실행할거임! // for문이 한번 끝날때 마다 i값을 1증가 시킬거임! total += i; // i의 값을 total에 더함 } Debug.Log("1부터 100까지 더한 값 : " + total); } }
이렇게도 가능합니다.
(for문에 쓰이는 i를 밖에서 선언해도 됩니다.)
while문 |
while(반복할_조건) { 반복할_내용들...; if(어떤_조건) { break; // while문 탈출 } } while(반복할_조건) { 반복할_내용들...; 반복할_조건의_변화; // while문을 탈출하기 위함 } |
while문은 크게 2가지 방법으로 사용을 합니다. 반복을 하되 어떤 조건에 다다르면 while문을 탈출하도록 하는 방법과 반복할 조건에 쓰이는 변수의 값을 변화시켜서 탈출하도록 하는 방법으로 사용합니다. (왜냐하면 반복문을 탈출하지 않으면 무한반복을 하기 때문이죠.) 반복할 조건을 만족하면 true가 됩니다. (while(true)) |
예제를 보면서 알아봅시다.
using UnityEngine; public class TestScript : MonoBehaviour { int x, y; void Start () { // 구구단 프로그램(3, 6, 9단만 출력하는 구구단) // x * y = (x*y) x = 1; y = 1; while(x <= 9) // x값이 10이 되면 정지!! { while(true) { if(x % 3 == 0) // 3,6,9단만 출력하기 위해서 x를 3으로 나눌때 0인 값만 출력!! { Debug.Log(x + " x " + y + " = " + (x * y)); } if(y == 9) // y값이 9가 되면 정지!! { break; } y++; // y값을 1증가!! } x++; // x값을 1증가!! y = 1; // y는 다시 1로!! } } }
위의 알고리즘을 잘 생각하면서 결과를 보면
이렇게 잘 되는 것을 확인 할 수 있습니다.
while문과 for문을 더 자세히 알고 싶다고 한다면
3편에서 봐요 |