본문 바로가기

메봇 강좌

3.1.변수선언, 연산자

아직 강의내용이 다듬어지지 않아 상당히 더럽습니다.

추후 수정예정이니 양해부탁드립니다.

 

*단어목록

문자열 : “”또는 ‘’으로 싸여있으며, 사람이 읽을 수 있게 ‘문자’로 인식되는 것입니다.

숫자 : “”나 ‘’으로 싸여있지 않으며, ‘숫자’로 인식됩니다.

논리형 : true, false 같이 논리를 다룰 때 단골로 나옵니다.

변수 : 정보를 할당(저장)할 수 있는 공간이며, 문자열, 숫자, 자바스크립트 코드 등을 저장할 수 있습니다.

NaN : Not a Number 의 약자로, 주로 숫자가 들어가야 할 곳에 문자열이 끼여있으면 발생합니다.

 

 

1. msg, room, replier

msg는 카톡방에서 온 메시지내용을 의미합니다.

 

room은 카톡방에서 메시지가 왔을 때 그 메시지를 보낸 방을 의미합니다.

 

replier는 봇이 답장을 할 때 쓰는 것입니다.

replier.reply("안녕하세요");

를 한다면 채팅방에 안녕하세요 라는 메시지가 전송됩니다.

 

2. 변수

- var -

이것은 변수를 선언할 때 쓰이는 것입니다.

예를 들어,

var a;

이라고 하면 a라는 비어있는 변수가 생깁니다.

아직 이 변수 안에는 아무것도 들어있지 않습니다.

이때

a = 10;

이라고 한다면 a라는 변수 안에 10 이라는 숫자가 할당됩니다.

a = "안녕하세요 S2";

이라고 한다면 "안녕하세요 S2" 이라는 문자열이 할당됩니다.

 

만들자마자 정보를 할당할 수도 있습니다.

var b = 20;

이라고 한다면 b라는 변수가 생기며, 20 이라는 숫자가 할당됩니다.

 

이때 주의할 점은 변수 이름이 msg, room, DataBase, FileStream 등과 같이 자바스크립트 안에 이미 있는 이름과도 겹쳐서는 안 됩니다.

또한 한 줄의 끝에는 세미콜론(;)을 붙여 주는 것이 좋습니다.

(단, {이나 } 끝에는 보통 세미콜론을 붙이지 않습니다.)

(물론 다른 예외사항도 있긴 합니다만, 그런 걸 초보가 쓸 일은 없으니 넘어갑시다.)

(let 이나 const같은 것도 있습니다만 그것도 지금 쓸 일은 없으니 나중에 설명하겠습니다.)

 

3. 연산자

- 연산자 -

연산자들에는 아래와 같은 것들이 있습니다.

= + - ! * / % ^ > < == += -= != *= /= %= >= <= ++ -- || && === !==

등등

참고로 ()로 묶어 놓으면 그것을 최우선으로 계산합니다.

하나하나 알아보도록 하죠.

 

= 은 대입을 의미합니다.

만약

var a = 100;

이라고 한다면 a에 100을 대입하니까 변수 a에 100이 할당되는 겁니다.

이때 바로 이어서

a = 40;

이 이어진다면 앞서 대입했던 100은 사라지고 40이 새로 대입됩니다.

 

+ 는 말 그대로 더하기입니다.

숫자끼리 더하면 일반적인 상식대로 계산이 이루어지고,

문자열끼리 더하면 앞의 문자열 뒤에 뒤의 문자열이 붙어버립니다.

예를 들어,

var a = 10;

var b = 20;

var c;

c = a + b;

이라고 했다면 변수 c에는 30이라는 숫자가 할당됩니다.

또,

var a = "안녕하세요";

var b = "반가워요";

var c;

c = a + b;

이라고 한다면 변수 c에는 “안녕하세요반가워요”이라는 문자열이 할당됩니다.

 

- 는 말 그대로 빼기입니다.

숫자끼리 빼는 건 초등학생도 아는 것이기도 하고, 앞서 더하기와 원리가 같으니 넘어가고, 문자열끼리 빼는 건 하지 마세요. 나중에 문자열 빼는 거 따로 나와요.

 

! 는 NOT으로 보시면 됩니다. 이를 논리형 연산자라고 하는데, 이 연산자는 특이하게 다른 논리형 연산자 앞에 붙으면 ~이 아니다 로 바꿔버립니다. (저도 이 상태 그대로는 써본 적이 없답니다.)

 

* 는 곱하기입니다.

문자열끼리 곱한다는 생각은 하지 마시고(안 됩니다) 숫자끼리 곱하는 건 그냥 아시는 대로 수학 배우신 거랑 같습니다. 사용법도 더하기랑 같지만 더하는 대신 곱할 뿐입니다.

 

/ 는 나누기입니다. 나눠질 수가 앞에 옵니다. 사용법은 더하기와 같지만 더하는 대신 나눌 뿐이며, 나머지라는 개념 없이 그대로 소수까지 계산합니다.

 

% 는 나머지 연산자입니다. 나눠질 수가 앞에 오며, 몫은 버리고 나머지를 반환합니다. 당연히 사용법은 더하기와 같습니다.

 

^는 제곱입니다. 왼쪽 수를 오른쪽 수만큼 제곱합니다.

예를 들어,

var a = 2;

var b = 3;

var c;

c = a^b;

를 한다면 변수 c에 숫자 8이 할당됩니다.

 

> 와 < 은 각각 크다와 작다 라는 논리형 연산자이며 양쪽의 숫자를 비교해 보고 옳다면 true, 아니라면 false를 반환합니다.

(문자열끼리 비교하는 짓은 하지 마세요)

 

== 은 같다 라는 논리형 연산자입니다.

그냥 양쪽이 같으면 true를 반환하고, 아니면 false를 반환합니다.

(단, 문자열인지 숫자인지는 안 따져요)

예를 들어,

var a = 200;

var b = 300;

var c = "안녕하세요";

var d = "200";

이라고 미리 변수들을 설정해 놓았다면,

a == b는 false이고,

a == c도 false이지만,

a == d는 true를 반환합니다.

 

+= 와 -=는 대입연산자입니다. 단지 대입하기 전에 왼쪽 것과 오른쪽 것을 더하거나 뺀 뒤 왼쪽에 대입할 뿐이죠.

예를 들어,

var a = 100;

var b = 200;

var c = "안녕하세요";

var d = "반가워요";

이라면

a += b;

를 하였을 때 a 에는 300이라는 숫자가 대입됩니다.

그냥 a = a+b를 한 것이나 같습니다.

-=, *=, /=, %= 도 마찬가지의 원리입니다.

 

>= 와 <= 는 > 와 < 하고 거의 같지만, 단지 크거나 같다 그리고 작거나 같다를 의미할 뿐입니다.

 

++는 자기 앞에 온 것에다가 1을 더합니다.

예를 들어,

var a = 0;

a++;

이라고 한다면 변수 a는 0에 1을 더한 값인 1이 됩니다.

 

--는 ++와 비슷하지만 단지 1을 더하는 게 아닌 1을 빼는 것일 뿐입니다.

 

|| 는 OR을 나타내는 연산자입니다.

주로 나중에 배울 if 같은 제어문이나 for, while 같은 반복문 등에 들어가는 조건식에 쓰이게 됩니다. 이것은 제어문에서 자세히 다루도록 하겠습니다.

 

&& 는 AND를 나타내는 연산자입니다.

이것도 조건식에서 쓰입니다. 제어문에서 자세히 다루도록 하겠습니다.

 

=== 는 ==과 비슷합니다. 양쪽이 내용도 같고, 형태(숫자, 문자열, 논리 등)도 같은지 검사해서 만약 모두 같다면 true를 반환하며, 하나라도 같지 않다면 false를 반환합니다.

예를 들어,

var a = 1;

var b = "1";

var c = 1;

var d;

이라고 한다면,

d = (a === b);

를 했을 경우에는 변수 d에는 false라는 논리형 데이터가 할당됩니다.

a 는 1이라는 숫자형 데이터가 들어있고, b에는 “1”이라는 문자열형 데이터가 들어있기에 형태가 다르기 때문이죠.

 

만약

d = (a === c);

를 한다면 변수 d에는 true이라는 논리형 데이터가 할당됩니다.

a 와 c 모두 1이라는 숫자형 데이터를 가지고 있기에 일치하기 때문이죠.

 

!== 는 != 와 비슷합니다. 양쪽이 내용이 다르거나, 형태(숫자, 문자열, 논리 등)가 다르거나 둘 중 하나라도 다르다면 true를 반환하며, 내용과 형태 둘 다 같다면 false를 반환합니다.

===의 반대인 셈이죠.

 

4. 기본적인 도구들

- indexOf() -

이것은 특정한 문자열에서 ()안의 문자열이 포함되는지 확인하는 것입니다.

문자열의 앞부터 검사해서 있다면 그 위치를 숫자로 반환하며, 없다면 -1 을 반환합니다.

참고로 위치는 0부터 시작합니다.

예를 들어, 메시지가 왔을 때, 이 메시지 안에 “안녕” 이라는 단어가 있는지 확인하려면

msg.indexOf("안녕");

을 해보면 됩니다.

 

예시로

msg가 “1급_청정수님 안녕하세요” 이라면

8을 반환할 것이고,

msg가 “네 반갑습니다” 이라면

-1을 반환합니다.

 

1급_청정수님 안녕하세요

0 1 2 3 4 5 6 7 8 9 10 11 12

 

- String() -

()안의 숫자나 코드 등을 문자열화합니다.

예를 들어,

013924 이라는 숫자를 문자열 화하고 싶다면

var a = 013924;

var b;

b = String(a);

을 하면 변수 b에 “013924” 이라는 문자열이 할당됩니다.

 

- Number() -

()안의 숫자로 된 문자열을 숫자로 바꿉니다.

예를 들어, “123” 이라는 문자열을 숫자로 바꾼다면,

var a = "123";

var b;

b = Number(a);

를 하면, 변수 b에 123 이라는 숫자가 할당됩니다.

 

만약 ()안에 숫자가 아닌 문자열이 끼여 있다면 NaN을 반환합니다.

예를 들어, “가나다 123 abc”라는 문자열을 Number()에 집어넣는다면

var a = "가나다 123 abc";

var b;

b = Number(a);

을 하면 변수 b에 NaN이 할당됩니다.

 

- replace(a,b) -

이것은 앞의 문자열에서 a가 있는지 앞에서부터 찾아본 뒤, 가장 먼저 찾은 것을 b로 바꿉니다.

예를 들어, 메시지에서 “/검색 ”을 없애고 싶다면

var a;

a = msg.replace("/검색 ",“”);

을 했을 때 변수 a에 “/검색 ” 이 제거된 문자열이 할당됩니다.

 

또, 만약 “안녕하세요 1급_청정수 님” 이라는 메시지에서 “안녕하세요 ”를 “안녕하십니까” 로 바꾸고 싶다면

var a;

a = msg.replace("안녕하세요",“안녕하십니까”);

를 하면 변수 a에 “안녕하십니까 1급_청정수 님” 이라는 문자열이 할당됩니다.

 

- trim() -

문자열 앞뒤의 공백을 없앱니다.

예를 들어, “ 안녕하십니까” 라는 메시지에서 앞의 공백을 없애고 싶다면

var a;

a = msg.trim;

을 하면 변수 a에 “안녕하십니까” 이라는 문자열이 할당됩니다.

 

- 주석 -

자바스크립트에는 주석, 즉 // 이나 /* */ 을 이용하여 코드 내부에 설명을 붙일 수 있습니다. 보통 1줄짜리 주석에는 //을 사용하고, 여러 줄짜리 주석에는 /* */ 을 사용합니다.

예를 들어,

var a = 100;

//a += 200;

이라고 한다면 2번째 줄은 주석처리되어 작동하지 않으므로 변수 a에는 100이 그대로 있습니다.

또,

var a = 100;

var b = 30;

/*

a += b;

*/

a -= b;

이라고 한다면 변수 a에 a와 b를 더한 수인 70이 저장됩니다.

 

궁금하신 점이 있다면 댓글로 적어주시기 바랍니다.

'메봇 강좌' 카테고리의 다른 글

3.3.반복문  (0) 2020.03.29
3.2.제어문  (0) 2020.03.28
2.1. 핑퐁 봇 만들어보기  (10) 2020.03.26
2. 카카오톡 봇 기본 세팅하기  (9) 2020.03.26
1. 카카오톡 봇에 대하여  (0) 2020.03.26