1. 오늘 학습 키워드
어제 배운 게 1, 2, 3, 4 였다면 이제 더하고 빼고 곱하고 나눌 시간이다.
그리고 겸사겸사 기초프로그래밍도 해볼 것이다.
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
2-1. 사칙연산(연산자)
연산은 어렵지 않다. 사실 엑셀이나, 기본적인 컴퓨터 계산기를 사용하는 사람들은 이미 익숙한 것들이다.
+ 더하고
- 빼고
* 곱하고
/ 나눈다.
% ←차이점이라면 얘는 퍼센테이지가 아니라 나머지라는 점이다.
추가로 ++는 1씩 증가, --는 1씩 감소이다.
하지만 / 나누기는 나누기보다 0.5f를 곱하는 게 더 빠르고 편하다. 잘못 나눴다가 무한 소수 나오는 것보단 훨씬 나을 것이다….
아래는 콘솔에 실제로 계산해서 적용한 것이다.

Console.WriteLine("10이 있습니다.");
int ten = 10;
//7 더하기
Console.WriteLine("1번. 7 더하기");
int plus;
plus = ten + 7;
Console.WriteLine(plus);
//3 빼기
Console.WriteLine("2번. 3 빼기");
int minus;
minus = ten - 3;
Console.WriteLine(minus);
//2 곱하기
Console.WriteLine("3번. 2 곱하기");
int multi;
multi = ten * 2;
Console.WriteLine(multi);
//1.5 곱하기
Console.WriteLine("4번. 1.5 곱하기");
float multiple;
multiple = ten * 1.5f;
Console.WriteLine(multiple);
//3 으로 나누기
Console.WriteLine("5번. 3 나누기");
int divide;
divide = ten / 3;
Console.WriteLine(divide);
//4 로 나눴을때 나머지
Console.WriteLine("6번. 4로 나눈 나머지");
int remain;
remain = ten % 4;
Console.WriteLine(remain);
★사칙연산의 우선순위는 어떻게 되는가?
: 사칙연산의 우선순위는 우리가 일반적으로 계산하는 사칙연산 수식과 같다.
( ) 괄호 속에 있는 계산이 우선되며, 그 다음으로 곱셈과 나눗셈이 차례대로, 마지막으로 덧셈과 뺄셈이 차례로 계산된다.
Console.WriteLine("사칙연산간 우선순위 확인");
float x = 20.0f;
float y;
y = x +4 / 2;
Console.WriteLine(y); //나누기가 먼저일 시: 22, 더하기가 먼저일 시 12
//y=22 가 나온 것으로 나누기가 먼저 계산됨을 확인함
float z;
z = x - 3 + 4 - 1;
Console.WriteLine(z);
//z=20
// 덧셈과 뺄셈은 앞에서 뒤로 계산된다.
float a;
a = x * 4 / 2;
Console.WriteLine(a);
//a=40
// 곱셈과 나누기도 앞에서 뒤로 계산된다.
float b;
b = x + 4 * 4 / 2;
Console.WriteLine(b);
// 앞에서부터 계산할 경우 48. 곱셈부터라면 28 인데 28이 나왔다.
// 곱셈과 나누기 부분을 우선 처리하고 덧셈과 나눗셈을 처리한다는 걸 알 수 있다.
float c;
c = x - 3f / 4 * 2; // -3/4f로 작성해도 계산은 정상적으로 기능한다.
Console.WriteLine(c);
// c=18.5
//나누기가 정수로 나누어 떨어지지 않을 때는 반드시 뒤에 f를 붙여주도록 하자. 안그러면 int 처리가 되어 0.75가 0처리가 된다. (이 경우 0*2는 0이므로 c=20이 된다.)
float d;
d = (x + 5) / 5;
Console.WriteLine(d);
//d=5
// ( ) 괄호가 있을 경우, 괄호 속에 있는 식을 우선 계산 후 다음 계산을 이어감을 확인할 수 있다.
!!주의!!
:계산에 소수, 분수 등 '실수'가 들어가면 꼭 f를 붙여주자. 붙여주지 않으면 정수처리가 되므로, 우리의 스크립트는 봐주지 않고 소숫점을 버릴 것이다….
2-2. 문자 계산
문자도 더할 수 있다.
가장 심플한 예시라면, RPG 게임에서 캐릭터 이름을 정하면 "아, "캐릭터 이름" 이구나, 잘 부탁해." 할 때가 아닐까 생각한다.
방식은 단순하다.
string A = "문자열"+"문자열" 의 형식으로 쓰면, 문장이 이어져서 나온다. 보통 온전한 문장을 저렇게 쓰진 않을테니, 중간에 데이터를 삽입할 때 주로 사용하게 될 것 같다.
콘솔에 직접 적용한 모습을 한 번 확인해보자.
Console.WriteLine("여기부터는 문자의 계산입니다."); //이건 콘솔 내에서 내용의 구분을 위해 작성했다.
string name = "Teabag"; //이름을 Teabag으로 지정했다.
int year = 2025; //올해는 2025년이므로, 2025년으로 지정헀다.
string introduce = "안녕하세요. 제 이름은" + name + "입니다.";
Console.WriteLine(introduce); //소개를 출력한다.
string thisYear = "올해는'" + year + "년'입니다.";
Console.WriteLine(thisYear); //올해가 몇 년도인지 출력한다.
결과:

2-3. 논리연산
더하고 빼고, 이제 글도 붙여쓸 수 있다.
그럼 이제 수를 서로 비교하고, 그게 참인지 거짓인지도 판별해보자.
참거짓 판별기 bool이 다시 나타날 시간이다.
우선, 부등호부터 확인해보자. 수의 서로 크고 작음, 같고 다름을 확인하기 위해서는 부등호가 필수적이다.
이것 역시 엑셀에서도 많이 쓰이는 부등호이기 때문에, 엑셀을 많이 다뤘다면 익숙할 것이다.
x==A : x는 A와 같다
x != A : x는 A와 다르다 (≠의 대신이다.)
x <= A: x는 A와 작거나 같다(이하. ≤의 대신이다.)
x >= A : x는 A보다 크거나 같다(이상. ≥의 대신이다.)
x < A : x는 A보다 작다(미만)
x > A : x는 A보다 크다(초과)
실제 적용 코드와 콘솔 결과는 아래와 같다.

int ten = 10;
Console.WriteLine("여기부터는 논리연산 입니다.");
Console.WriteLine("1번. ten은 10이랑 같다.");
bool result_1=ten==10; //참거짓 확인용 코드
string anserA;
anserA = result_1.ToString(); //bool 값을 string으로 바꿔보았다. 하지만 실제로는 불필요한 작업이기에, 2번부터는 제거한다.
Console.WriteLine(anserA);
Console.WriteLine("2번. ten은 11이랑 같지 않다.");
bool result_2=ten!=11;
Console.WriteLine(result_2);
Console.WriteLine("3번. ten은 20보다 작다.");
bool result_3=ten<20; // <=를 사용해도 된다. 하지만, '작다'라고 작성했기 때문에 미만으로 판단. <로 썼다.
Console.WriteLine(result_3);
Console.WriteLine("4번. ten은 5보다 크다.");
bool result_4=ten>5;
Console.WriteLine(result_4);
번외. 조건 확인
종종 우리는 두가지 조건을 다 만족해야 OK인 경우, 혹은 둘 중 하나의 조건이라도 만족하면 OK인 경우도 만들어야 한다.
스토리형 게임에 자주 나오는 '엔딩 분기' 같은 곳에서 자주 쓰이는 내용일 것이다.
A이벤트와 B 이벤트를 둘 다 봤다면 트루엔딩, A이벤트나 B이벤트 중 하나만 봤다면 노멀엔딩, 둘 다 보지 못했다면 배드엔딩…같은 조건들 말이다.
아니면 프린세스 메이커 시리즈처럼 특정 능력치 중 하나가 몇 이상이면 어떤 직업 엔딩을 볼 수 있다던가.(ex. 도덕과 지능 능력치 중 하나가 500 이상일 경우 학자가 된다.) //실제 인게임 데이터와는 관계없다.
이때 쓰는 것들이 &&와 ||이다.
[조건확인 연산자]
&& : AND 연산자라고 부른다. A와 B의 조건을 모두 만족해야 조건이 실행된다.
|| : OR 연산자라고 부른다. A와 B 중 하나의 조건만 만족하면 실행된다.
2-4. 프로그래밍 한 발자국 (부제: 조건문을 써보자)
게임에서는 작성된 데이터만 출력하지 않는다. Console.WriteLine(); 만 줄줄 나오면 그건 그냥 커맨드나 유니티로 만든 소설책이 될 것이다….
그보다도 프로그램이라는 것 자체도, (설령 게임이 아니더라도)
A데이터를 넣으면 a라는 출력값을 내놓을 수 있어야하고, 또한 사용자가 K라는 데이터를 넣으면 k라는 데이터가 출력될 수 있어야한다.
여기서 우리는 if를 꺼낼 것이다.
영어 if가 무슨 뜻인지 대한민국 정규교육을 받았다면 대충 알고 있다. (만약 ~라면, ~이다.)
엑셀에서도 조건문으로 if를 줄창 쓴다. if("YES",1,0) 같은 식으로. 저게 "YES"면 1이고, 아니면 0이 출력된다.
여기도 똑같다.
if (조건)
{
출력될 내용이나 적용될 함수 등이 들어간다.
}
어라, 이렇게 쓰고보니까 뭔가 좀 허전하다. 조건에 맞을 때 출력되는 값은 있는데, 그럼 조건에 안맞으면?
위와 같은 수식이라면 아무런 반응이 일어나지 않는다.
그렇지만 전부 '무반응'은 아니다.
이때 사용하는 게 else이다. 조건에 맞지 않으면 출력될 값이다. 조건이 하나 뿐이라면 단순하게 아래와 같은 식이 될 것이다.
if(조건)
{
실행내용
}
else
{
조건 불충족시 실행될 내용
}
좋아, 그럼 조건이 만족되지 않으면 어떻게 할지 알 수 있다. 그렇지만, 엑셀에도 여러 조건을 나열할 때 쓰는 IFS 함수가 있다.
OX퀴즈가 아닌 이상 A or B 양자택일이 일어나진 않을 것 아닌가.
이때 쓰는 놈이 else if이다.
if의 조건은 안 맞는데 다른 조건을 제시해서 또 걸러내는 역할이다.
if(조건1)
{
조건1 만족 시 실행내용
}
else if(조건2)
{
조건 2 만족 시 실행내용
}
else
{
모든 조건과 부합하지 않을 때 실행 내용
}
이런 식으로 무한히 늘릴 수 있는 조건문이 될 수 있는 것이다.
물론, 그렇게 하면 너무 길고 복잡해진다. 가능하면 간단하게 하자.
※조건은 위에서부터 차례대로 내려온다. 즉, 위의 조건을 먼저 '만족'하면 그 뒤의 조건문은 무시된다. 즉, 넣은 조건 1과 2 둘다 만족하더라도, 실행되는 것은 조건 1의 내용이다. 때문에, if문을 사용할 때는 가능한 서로의 조건이 겹쳐지지 않도록 하거나, 상위에 있는 조건 1이 조건 2보다 더 작은 범위의 조건이어야 한다.
예시: 조건 1이 x<10 인데 조건 2가 x<5 라면, 조건 2는 실행될 수 없다. (1, 2, 3, 4 모두 조건 1도 충족하기 때문이다.)
그러나 조건 1이 x<5이고 조건 2가 x<10이라면 조건 2는 x값이 5, 6, 7, 8, 9 일 때 실행된다.
2-5. 입력된 데이터 넣기
그리고 string input = Console.ReadLine(); 을 통해, 이제 데이터를 넣어볼 것이다.
위의 코드는 input 이라는 이름의 문자열 속으로, 콘솔창에 입력한 데이터를 넣어준다.
콘솔창에 A라는 데이터를 넣는다면, 위의 식은 string input="A" 가 되는 것이다.
그리고 그 입력값에 따라 다른 내용을 출력하도록 만들 수 있다.
아래는 실제로 콘솔에 적용할 수 있는 코드이다.
string input = Console.ReadLine(); // 데이터를 입력할 수 있도록 만든다.
//각각 정수, 실수, 불리언으로 n, f, b값을 선언해준다.
int n;
float f;
bool b;
//2일차에 익힌 .TryParse();를 이용해, 조건에 넣을 True, False 값을 만들어줄 bool값을 선언해준다.
bool resultN;
resultN = int.TryParse(input, out n); //이 값이 참일 경우 정수이다.
bool resultF;
resultF=float.TryParse(input, out f); //이 값이 참일 경우 실수이다.
bool resultB;
resultB=bool.TryParse(input, out b); //이 값이 참일 경우 불리언이다.
//그리고 모두 해당되지 않으면, 해당 input 값은 문자열이다.
//위의 주석을 참고로, 아래에 조건문을 만든다.
if (resultN)
{
Console.WriteLine("입력받은"+input+"은(는) 정수입니다.");
//resultN이 참이라면 이 조건이 실행된다.
}
else if (resultF)
{
Console.WriteLine("입력받은" + input + "은(는)실수입니다.");
//resultN에 해당되지 않고, resultF가 참이라면 이 조건이 실행된다.
}
else if (resultB)
{
Console.WriteLine("입력받은"+input+"은(는)불리언입니다.");
//resultB가 참이라면 이 조건이 실행된다.
}
else
{
Console.WriteLine("입력받은"+input+"은(는)문자열입니다.");
//모두 거짓이라면 이 코드가 실행된다.
}
2-4. 에서 말했던 것처럼, 정수는 실수도 되기 때문에, float 값을 확인하는 resultF의 조건문을 resultN의 조건문보다 하위에 두었다. 만약 두 조건문의 위치가 바뀐다면 3을 넣어도 실수라고 나올 것이다.(틀린 말은 아니지만. 범위가 너무 넓다.)
여기는 추가형태이다. (크기비교와 조건확인 연산자를 사용한 값.)
string input = Console.ReadLine();
float x; //실수를 작성해도 비교할 수 있도록 float를 사용했다.
bool resultN;
resultN = float.TryParse(input, out x);
if (resultN && x>=100) //입력값이 실수이고, 100보다 클 때 작동한다.
{
Console.WriteLine(input+"은(는) 100보다 같거나 큰 수입니다.");
}
else if(resultN && x<100)
//입력값이 실수이고, 100보다 작을 때 작동한다. resultN이 반드시 참(input값이 실수)이어야 하므로 ||를 사용하지 않았다. 하지만 문자라면 애초에 둘 다 성립되지 않을테니 상관은 없었을 것이다. 실수 예방을 위한 값이다.
{
Console.WriteLine(input + "은(는) 100보다 작은 수입니다.");
}
else
{
Console.WriteLine(input+"은(는) 수가 아닙니다.");
}
세번째 형태이다. (짝수/홀수 판별기)
string input = Console.ReadLine();
int x; //짝수와 홀수 개념은 정수에만 있기 때문에, int를 사용했다.
bool resultN;
resultN = int.TryParse(input, out x);
int result = x % 2; //2로 나눈 나머지 값으로 짝수와 홀수를 판별한다.
if (resultN && result == 0) //input값이 정수이고 나머지가 0이라면, 짝수이다.
{
Console.WriteLine(input + "은(는) 짝수입니다.");
}
else if (resultN && result!=0) //input값이 정수이고, 나머지가 0이 아니라면, 홀수이다.
{
Console.WriteLine(input + "은(는) 홀수입니다.");
}
else //그조차도 안된다면, 애초에 정수가 아니다.
{
Console.WriteLine(input + "은(는) 정수가 아닙니다.");
}
2-6. 선택지 맛보기
if는 조건문이다. A가 아니면 B를 보고 B도 아니면 C를 본다…. 그런 식으로 '분류'를 한다.
그럼 선택지는 어떻게 만들까? 한 번에 A B C를 보고 난 B할래! 하고 정할 수도 있는 법이다.
퀴즈게임 같은 곳에서 쓸 수 있는 이 '선택지'를 만드는 방법은 switch~case다.
둘의 차이를 좀 더 알기 쉽게 써보도록 하겠다.
if 함수
입력할 때 A, B, C 셋 중 하나를 입력할 것이다. 그 외의 것을 쓰면 "응답없음"이라는 내용을 출력한다고 가정하자.
A는 놀기, B는 식사, C는 취침 으로 출력된다.
그럼 C를 입력한다고 했을 때, if문은 다음과 같은 과정을 거친다.
조건1. 입력된 것이 A인가?
>그렇다 >놀기 //해당하지 않으므로 실행되지않음
>아니다 >조건 2로
조건2. 입력된 것이 B인가?
>그렇다>식사 //해당하지 않으므로 실행되지않음
>아니다>조건 3으로
조건3. 입력된 것이 C인가?
>그렇다 >취침 //C이므로 출력된다.
>아니다> "응답없음" //조건을 충족했으므로 실행되지 않는다.
꽤 긴 과정을 거치게 된다. 그렇다면 같은 조건으로, switch~case를 쓰면 어떻게 될까?
switch~case
입력할 때 A, B, C 셋 중 하나를 입력할 것이다. 그 외의 것을 쓰면 "응답없음"이라는 내용을 출력한다고 가정하자.
1. A는 놀기, 2. B는 식사, 3. C는 취침 으로 출력된다.
C에 해당하는 3을 입력할 때, switch~case는 다음과 같은 과정을 거친다.
입력된 값이 3이다> case 3을 보자>취침 출력
상당히 간단한 방식으로 출력된다. 즉, 계산 속도는 이쪽이 더 빠르고, 단순하다.
단, if문과 달리 반드시 1, 2, 3 의 형태의 정수를 넣어주어야 한다.
또한, 반드시 break;를 작성하여 해당 케이스를 종료시켜주어야 한다.
아래는 실제 활용 예시이다.
Console.WriteLine("뭐 먹을래?"); //질문
Console.WriteLine("1.치킨, 2.피자, 3.마라탕, 4. 모르겠어"); //선택지 표시
string input = Console.ReadLine(); //입력창
int x;
x = int.Parse(input); //입력한 번호를 int 데이터에 삽입
Console.WriteLine("선택"+input); //선택한 내용 확인
switch (x)
{
case 1: //case 넘버 뒤에는 : 콜론을 넣는다. 세미콜론이 아니다. '선택지1: <실행내용>'같은 느낌이다.
Console.WriteLine("치킨을 주문하자.");
break;
case 2:
Console.WriteLine("피자를 주문하자.");
break;
case 3:
Console.WriteLine("마라탕을 주문하자.");
break;
case 4:
Console.WriteLine("배고파, 빨리 정해.");
break;
default: //만약 넘버링 외의 값이 입력되었을 경우 출력한다.(해당되지 않는 정수를 포함한 다른 문자 등)
Console.WriteLine("무슨 소리야?");
break;
}
3. 학습하며 겪었던 문제점 & 에러
- 문제&에러에 대한 정의
1. f(float)는 신경쓰자.
: 사칙연산에서 신경써야 하는 것 1순위. 무심코 1.5라고 입력해놓고 왜 1밖에 안더해졌지 같은 말을 하지 않기 위해 주의해야한다. 이번에는 사칙연산에서 3/4 같은 값을 만들었다가 0처리가 되어서 이거 왜 안되나 생각했다.
팀원들에게 물어봤다가 알았다. 아. 저거 정수 아니지.(float로 x값을 처리했어도, 계산하는 수 뒤에 f를 붙이지 않으면 자비가 없더라.)
2. if 조건문에 bool값 = true로 쓰지 말자.
: 정확히는, 쓸거면 ==로 쓰자. =true 라고 쓰면 쟤는 그냥 참입니다. (틀렸어도?) 네 그래도 참이에요 그렇게 정했어요. 하고 내용을 재정의 해버린다!
참거짓을 가릴 것이라면 아예 쓰지 않아도 ok이다. 어차피 bool값은 true/false 양자택일이니까.
- 내가 한 시도
1. 일단 사칙연산 우선순위를 보기 위함이었기 때문에, 정수로 딱 떨어지도록 계산식을 바꿨다.
그리고 해당 내용은 따로 빼두었다가 팀원에게 질문했다.
2. 그냥 = true 라고 쓴 놈을 싹 지웠다. 괜한 사족을 붙였다가 수식 다 꼬아먹은 케이스가 될 뻔했다. 역시 단순한 게 최고구나. 단순 착오였기 때문에 오래 걸리지는 않았다.
- 해결 방법/새롭게 알게 된 점
1.
단순히 정수 계산이라고 생각했기 때문에 f를 붙일 생각도 못하고 있었다. f를 붙여보면 어때요? 라고 대답해주셔서 수 하나 하나에 f를 붙였다 떼었다를 반복하며 원인을 찾았다.
3/4 <이놈들 중 하나에게만 붙여도 처리를 해주더라. 아마 f가 3에 붙었을 땐 분자에 f를 붙여둔 일반 분수 같은 느낌으로 본 것 같고, 4에 f를 붙였을때는 0.75f 같은 한덩어리로 처리해준 것 같다.
2. 이후 뒤에 ==true라고 수정해서 또 작성하여 재실행해봤다. 이렇게해도 잘 돌아간다.
- 이 문제&에러를 다시 만나게 되었다면?
1. 일단 수식 중에 잘못들어간 수치가 없는지 확인해봐야 할 것이다. 그보다도 / 나누기를 사용하기보다는 1.5f와 같은 소수를 곱하는 쪽이 더 나을 것이다.
2. =은 이다 ==같다 임을 잊지 말자. 보통은 둘의 용법 자체가 다르니 실수로 하나만 입력하는 일이 아닌 한 꼬일 일은 적을 것 같다.
4. 내일 학습 할 것은 무엇인지
조건문 제 2차전을 시작할 것이다.
조건확인 연산자를 배웠으니까. 두가지를 활용해서 알아서 비교도 해주고 결과도 내주는 걸 만들어볼 예정이다.
'Unity_사전캠프' 카테고리의 다른 글
[사전캠프 6일차] for, while, do-while? 반복문, 그리고 배열. (0) | 2025.03.24 |
---|---|
[사전캠프 5일차] switch case문, 그리고 if문(+반복문 맛보기) (0) | 2025.03.21 |
[사전캠프 4일차] 조건문의 활용 (0) | 2025.03.20 |
[사전캠프 2일차] C# 언어와 데이터 작성부터 형변환까지 (0) | 2025.03.18 |
[사전캠프 1일차] Unity 조사하기 (0) | 2025.03.17 |