Profile
Experience

2018.12.17

GML 차근차근 배워보기. [ 3 ] 연산자 (1)

조회 수 6 추천 수 0
애드블럭을 꺼주시면 서버 운영에 도움이 됩니다.
부탁드립니다.

GML 차근차근 배워보기

 

* 게임메이커 8.0을 기준으로 작성된 강좌입니다.

[ 3 ] 연산자

 

 

1. 연산자의 정의

 

연산자는 간단히 말해 주어진 데이터들을 우리가 원하는 형태로 가공하기 위한 도구라고 할 수 있다. 수학에서 자주 사용하는 덧셈, 뺄셈 등의 사칙연산부터 프로그래밍 언어 고유의 특수한 연산자들까지 다양한 종류가 존재한다. 이 장에서는 연산자의 종류와 그 간단한 활용에 대해서 알아본다.

 

2. 연산자의 종류

 

연산자의 종류는 크게 나누면 다음과 같다. 단, 이 분류는 편의대로 작성한 것이며 GML 공식적으로 정의된 분류는 아니다.

 

 가. 산술 연산자 : 이름 그대로 계산을 할 때에 이용되는 연산자다. 사칙연산이 모두 여기에 속하며, 그 외에도 이 분류에 속하는 연산자가 몇 가지 존재한다.

 

 나. 관계 연산자: 서로 다른 두 데이터 사이의 관계를 비교하여 참과 거짓을 가려낼때 쓰는 연산자이다.

 

 다. 대입 연산자: 변수에 값을 대입할 때 사용하는 연산자이다. 이미 변수의 선언 부분에서 값을 대입할 때 다룬 적이 있다.

 

 라. 부호 연산자: 수의 부호에 관련된 연산자이다.

 

 마. 비트 연산자: 모든 값을 내부적으로 2진법으로 처리하는 컴퓨터의 특성과 관련이 깊은 연산자이다. 잘 응용할 경우 강력한 기능을 발휘할 수 있다.

 

 바. 논리 연산자: 주어진 여러 가지 식의 논리 관계에 따라 참, 거짓을 가려낼 때 사용하는 연산자이다. 관계 연산자와 같이 이용할 때가 많다.

 

 사. 복합 대입 연산자: 대입 연산자와 다른 연산자를 합한 연산자이다. 식을 간단하게 나타낼 수 있다는 장점이 있다.

 

 아. 괄호 연산자: 주어진 식의 연산 순서를 바꾸기 위한 연산자이다.

 

 그럼 지금부터 각각의 연산자에 대해 알아보도록 하겠다.

 

 

3. 산술 연산자

 

 산술 연산자에는 +,-,*,/,mod,div의 6가지가 있다. 하나씩 하나씩 살펴보자. 우선, 1강에서 이야기한 기본 강좌 진행환경과 동일한 구성의 프로젝트를 만든다. 앞으로 진행되는 예제는 대부분 이 환경을 바탕으로 구성되므로, 생성코드와 제거코드를 작성하라고 하면 이 진행환경에서 작성한다고 생각하자.

 

 그리고 생성코드와 제거코드에 다음과 같은 코드를 작성한다.

 

 < 생성 코드 >

 

 a=get_integer("a=?",0);

 b=get_integer("b=?",0);

 

 < 제거 코드 >

 

 show_message(a+b);

 

 이전 강좌에서 입출력에 대해 제대로 설명하지 않은 것 같아 여기서 잠깐 설명하고 넘어가도록 하겠다. get_integer 함수는 창을 띄워 프로그램의 사용자로부터 정수값을 입력받는 함수이다. get_integer("창에 띄울 텍스트",초기값)의 형태로 사용한다. 아마 코드를 작성하고 직접 실행시켜보면 쉽게 이해할 수 있으리라고 생각한다. show_message 함수는 show_message("창에 띄울 텍스트")와 같은 형식으로 사용하며 단순히 창에 텍스트를 띄우는 역할을 수행한다.

 

 그럼 주어진 코드에 대한 설명을 계속하겠다. 아마 저 코드를 작성하고 실행시키면 순서대로 a,b 값을 입력받은 후, a와 b 값의 합을 출력할 것이다. 사실 큰 설명이 없어도 쉽게 이해할 수 있는 코드다.

 

 덧셈 외의 뺄셈, 곱셈, 나눗셈등도 똑같이 작동하며, GML은 기본적으로 모든 숫자를 실수 취급하기 때문에 나눗셈 결과는 실수로 나타난다. 위의 코드에서 +를 /로 바꾼 뒤 적당한 값을 대입해보자.

 

 사칙 연산의 경우 다들 잘 알고 있을 것이기 때문에 이 정도의 설명이면 충분할 것이다. 사실 일상 생활에서 사용하듯이 그대로 사용하면 될 정도로 간단하다. 하지만 mod와 div의 경우 약간 이질적인 부분이 있으므로 설명이 필요하다.

 

 우선 mod의 경우는 '나머지'를 돌려주는 연산자이다. a mod b의 결과값은 a를 b로 나눈 나머지가 된다. 예를 들자면 5 mod 3 = 2, 16 mod 9 = 7 과 같이 결과값이 나타난다. 코드를 작성하다 보면 이 나머지 연산자가 아주 중요한 역할을 하는 경우가 많다. 간단한 예를 들자면 어떤 숫자가 짝수인지 홀수인지를 판별하는 것에도 mod연산자가 적극 활용된다. 

 

 다음으로 div 연산자가 있다. 이건 나눗셈과 거의 비슷한 역할을 하는데, 특징은 결과값이 실수값이 아니라 정수값이라는 것이다. 위의 코드에서 +를 div로 바꾸고 실행해보자.

 

 5 div 3 = 1 (5/3 = 1.666666…)

 4 div 3 = 1 (4/3 = 1.333333…)

 

 결과를 보면 알겠지만 a div b 는 a를 b로 나눈 몫을 돌려준다.  나누기를 한 후 '내림'을 수행한다고 봐도 된다. 이 역시도 상당히 자주 활용되기 때문에 꼭 알아두어야하는 연산자이다.

 

 정리하면 다음과 같다.

 

 +,-,*,/ -> 사칙연산. 덧셈,뺄셈,곱셈,나눗셈

 

 div,mod -> 나눈 몫과 나머지.

 

 

4. 관계 연산자

 

 사실 관계 연산자는 연산자 자체만으로는 많이 사용하지 않고, 조건문이라는 것과 같이 사용한다. 일단 여기서 연산자들에 대해 알아두었다가, 이후 조건문 파트에서 다시 제대로 다뤄보도록 하자. 관계 연산자에는 다음과 같은 6가지가 있다.

 

 < , <= , == , != , > , >=

 

 우리가 흔히 알고 있는 부등호의 개념으로 생각하면 될 것이다. 일단 다음과 같은 코드를 작성하고 실행한 뒤 적당한 값을 넣어보자.

 

 

 < 생성 코드 >

 

 a=get_integer("a=?",0);

 b=get_integer("b=?",0);

 

 < 제거 코드 >

 

 show_message(a<b);

 

 실행후 a에 5, b에 7을 대입하면 1이 출력되고, 반대로 a에 7, b에 5를 대입하면 0이 출력된다. < 연산자는 앞의 수가 작으면 참, 크면 거짓을 돌려준다. 이 때 기본적으로 GML(을 포함한 대부분의 프로그래밍 언어)에서는 참을 1, 거짓을 0으로 두기 때문에 출력 결과가 1,0의 값으로 나타나는 것이다. 사실 엄밀히 말하자면 GML에서는 0보다 큰 수는 참, 0이하의 수는 거짓으로 정의된다.

 

 이 때 이 1과 0을 좀더 명확히 표현하기위해 true와 false로 나타내기도 한다. 실험을 위해 다음과 같이 작성해보자.

 

 < 생성 코드 > - > 아무것도 작성하지 않는다.

 

 < 제거 코드 >

 

 show_message(true);

 

실행해보면 1이 출력된다. 마찬가지로 false를 넣어보면 0이 출력된다. 즉, GML 내부에서 true와 false는 각각 1과 0의 값으로 취급된다는 것이다. 내장되어있는 일종의 상수로 생각하면 편할 것이다. 참, 거짓과 관련된 코드를 짤 때 1과 0이라는 숫자를 이용하는 것보다는 true와 false를 사용하는 것이 훨씬 가독성이 좋으므로 적극 활용하자.

 

 다른 관계식도 <와 비슷하다. 간단히 설명하면 다음과 같다.

 

 < : 앞의 수가 작으면 참.

 

 <= : 앞의 수가 작거나 같으면 참.

 

 == : 앞, 뒤의 수가 같으면 참. 대입 연산자(=)와의 혼동을 피하기 위해 ==으로 사용한다.

 

 != : 앞, 뒤의 수가 다르면 참.

 

 > : 앞의 수가 크면 참.

 

 >= : 앞의 수가 크거나 같으면 참.

 

5. 대입 연산자

 

대입 연산자는 변수에 값을 대입하는 연산자이다. 이 분류에 속하는 연산자에는 = , := 이 있다. 그런데 사실 := 연산자는 왜 있는지 모르겠다. 몇 가지 테스트를 해 보았지만 = 연산자와 완전히 동일한 기능을 수행했으며, 실제 도움말에도 이 연산자에 대한 설명은 없지만 막상 사용해보면 제대로 동작한다. 혹시라도 :=에 대해서 자세히 아시는 분이 있다면 가르쳐주길 바란다.

 

 대입 연산자에 대해선 딱히 다룰만한 내용이 없다. 변수에 값을 대입할 때 사용한다는 기본적인 사실만 알아두자.

 

6. 부호 연산자

 

부호 연산자에는 +,- 두 가지가 존재한다. 덧셈 뺄셈과 혼동할 수 있는데 이 연산자는 두가지의 값을 필요로 하는 것이 아니라 한 가지의 값만을 필요로 한다. 그리고 사실 + 부호 연산자는 잘 쓰이지도 않는다.(애초에 쓸 일이 없다.)

 

 우선 다음과 같은 코드를 작성한 후 실행해보자.

 

 

 < 생성 코드 >

 

 a= get_integer("a=?",0);

 

 < 제거 코드 >

 

 show_message(-a);

 

a의 값을 입력받은 후 -a의 값을 출력했다. 5를 입력했다면 -5라는 결과가 출력될 것이다. 이와같이 -연산자는 주어진 변수의 부호를 바꾸는 연산을 수행한다. +연산자는 -연산자가 존재하기 때문에 대칭성의 차원에서 존재한다고 생각하면 된다. 쓸 이유가 없으므로 별로 신경쓰지 않아도 상관없다.



Profile
2
Lv

0개의 댓글

번호 제목 글쓴이 날짜 조회 수
공지 게임메이커 구체적인 설명과 알면 매우 좋은 팁 30개 [장문] 7 profile 도개걸윷모 2018.11.03 121
64 [팁] <댓글 스티커>, <쿠키 마켓>의 쿠키 반환 비율 (수수료, 이익 비율) 2 profile 며르치 2019.01.21 21
63 [팁] 쿠키 얻기/쓰기 조건 정리 4 profile 며르치 2019.01.17 36
62 [쿠키 API] ini처럼 온라인 데이터 저장/불러오기 구현하기 1 profile 주인장수표 2018.12.26 39
61 [쿠키 API] 구글, 네이버, 카카오톡 로그인 구현하기 profile 주인장수표 2018.12.26 33
60 인벤토리 만들기 - 1 profile Experience 2018.12.18 27
59 간단한 도트 찍는 방법! profile Experience 2018.12.17 16
58 [자료] 스팀 게임 플레이어의 통상적 컴퓨터 사양 1 profile 주인장수표 2018.12.17 15
57 [변수의 활용] VAR (if) 액션과 컨트롤액션 profile Experience 2018.12.17 4
56 윈도우를 컨트롤하자! profile Experience 2018.12.17 11
55 GML 차근차근 배워보기. [ 4 ] 조건문 profile Experience 2018.12.17 5
54 GML 차근차근 배워보기. [ 3 ] 연산자 (2) profile Experience 2018.12.17 5
GML 차근차근 배워보기. [ 3 ] 연산자 (1) profile Experience 2018.12.17 6
52 GML 차근차근 배워보기. [ 2 ] 변수 (2) profile Experience 2018.12.17 6
51 GML 차근차근 배워보기. [ 2 ] 변수 (1) profile Experience 2018.12.17 7
50 GML 차근차근 배워보기. [ 1 ] 강좌 진행 환경 조성 2 profile Experience 2018.12.17 6
49 리얼리티 '뷰' 노이즈 강좌 profile Experience 2018.11.29 10
48 [윈도우] 게임을 실행할 때 다른 윈도우를 모두 최소화시키기 profile Experience 2018.11.29 11
47 간단한 8방향 이동 코드 profile Experience 2018.11.29 7
46 겜스 간단한 페이드인/페이드아웃 profile Experience 2018.11.29 9
45 게임메이커 8 강좌 5화 -룸- END profile Experience 2018.11.29 10
서버에 요청 중입니다. 잠시만 기다려 주십시오...