엔믹스 지우를 위한 코딩고수계정
[Skript] 4. 자료형 본문
마인크래프트 1.20.4 버전을, 플러그인도 해당 버전을 기준으로 작성되었습니다.
애드온 : Skacket, SkBee, Skellett, SkQuery, skript-reflect, skRayFall
*해당 게시글에 적용된 문법이 오류가 난다면 플러그인 버전이 달라 일어난 이슈일 가능성이 높습니다.
*게시글에 나오는 일부 함수들은 개인적으로 분류한 함수로 따로 추가해야 합니다.
이거는 글자고 이거는 숫자고, 이거는 머지?
자료형은 상당히 중요한 부분 중 하나다. 여러 기능을 다루다가 빈번하게 오류의 원인으로 자료형 안 맞춰서 일어나는 게 많다. 오류의 이유보다도 근본적으로 내가 코드 상에서 표현하고자 하는 바를 명확하게 할 수 있다는 점도 좋다.
자료형이 뭐임?
근본적으로 자료형이 뭔지를 알아야지 않는가? 자료형은 쉽게 말해 보관함의 종류이다.
예를 들어, 우리가 반지를 보관해야 한다고 생각해보자. 그러면 조그마한 상자에 보관해도 충분히 담길 것이다.
그런데 반지가 아니라 드럼세탁기라면 그 조그마한 상자에 넣을 수 있을까? 적어도 사람 크기의 상자, 혹은 컨테이너 같은 충분한 공간에 담아야 한다.
그리고 만약에 얼음을 보관해야 한다고 생각해보자. 일반 박스에 당연히 담긴다. 그런데 될까? 분명히 녹아서 물이 될 것이다. 그래서 얼음은 무조건 녹지 않게 아이스박스에 저장해야 한다.
자료형이 정확히 이것이다. 코드 상의 데이터라면 숫자, 문자와 같은 유형도 있고, 마인크래프트 상에서는 유저, 몬스터, 블록, 아이템 등등이 데이터에 해당한다. 그리고 이것을 나누는 기준이 자료형으로 정해진다.
Skript의 자료형은 무엇이 있지?
전부를 소개시켜줄 수는 없다. 그러나 주요하게 알아둬야 하는 것들 위주로 설명하겠다.
추가로 정확한 설명이 아닐 수 있다. 해당 자료형을 쉽게 이해할 수 있도록 간추려서 설명했다.
| 이름 | 설명 |
| integer | 정수형. 소수점이 없는 숫자를 의미 |
| number | 부동소수점. 소수점이 있는 숫자를 의미 |
| text | 문자형. 문자 형태의 모든 데이터를 의미 |
| player | 유저형. 유저의 이름(username)을 의미. 접속한 유저들만 유효함 |
| offline player | 유저형. 접속하지 않은 유저로 취급함. |
| time | 시간형. 시간 데이터를 다룰 때 사용. 반드시 숫자가 아닌 단위를 같이 써야 한다. ex) tick, second ... |
| boolean | 참거짓. true 혹은 false를 의미 |
| block | 블록 데이터를 의미 |
| item | 아이템 데이터를 의미 |
동적 타이핑
자료형이 뭔진 알았다. 그런데 이게 과연 뭔지 알 수 있을까?
다음 코드를 봐보자.
각 변수마다 자료형을 명시하지 않았다. 그러나 우리는 각 자료형이 뭘 뜻하는지 정확히 알고 있다.
차례대로 integer, number, text, player, item 으로 볼 수 있다.
이렇게 선언이 되면 자동으로 Skript 플러그인이 "아 이 변수는 이 종류의 상자로 넣어놔야 겠다"를 판단하고 결정한다.
이런 형태를 동적 타이핑이라고 한다. 스크립트에서만 쓰는 개념이 아니니 더욱 궁금한 사람은 찾아보길 바란다.
사실 추후에 여러 변수들을 쓰다보면 이 변수가 어떤 자료형이지? 라는 생각이 들 수 있다. 나도 가끔 그랬고.
이것이 동적 타이핑 언어의 크나큰 단점이다. 이런 점 때문에 자바스크립트 언어도 타입스크립트라는 도구가 생겨난 것이니 말이다.
지금으로서 최선은 변수 명에서 그것을 정의하거나 따로 문서를 잘 만들어 관리하는 것이다.
물론 내가 모르는 방식이 있을 수 있으니 관심있는 사람은 찾아보길 바란다.
(추가) 자료형 캐스팅
지금은 몰라도 되는 고오오급 정보를 다루겠다. 지금 이해 못해도 나중에 이해 될 것이니 넘겨도 무방하다.
에를 들어 보자.
arg 1, arg 2는 앞서 다뤘듯 인자를 뜻한다.
자 근데 인자의 생김새가 뭔가? 예전에는 그냥 넘어갔지만 지금은 말할 수 있다! 바로 문자형이다.
그런데 우리는 감각적으로 var1 변수는 integer인 걸 알고, 상식적으로 우리는 문자는 더할 수 없다는 것을 알고 있다.
"어? 그냥 인자들이 1 2 이런 걸 넣으면 되지 않음?"
자동으로 그것을 다뤄주는 환경이면 가능은 하겠다만, 당장에 생각해보면 우리는 "떡볶이" 와 "냉면"을 더할 수 있는가? 수학적으로? 못한다.
그럼에도 우리는 인자를 반드시 text 자료형으로 넣어야겠고, var1에 덧셈을 할 수 있도록 하고 싶다! 그렇다면 캐스팅이라는 것을 하면 된다.
캐스팅이 뭔가? 던지는 것이다.
큰 박스에 있는 요소를 모종의 이유로 아이스박스에 옮겨야 한다! 그러면 안의 내용물을 아이스박스로 던져서 넣는 것이다. 그러면 안의 내용물은 그대로지만 담은 박스의 형태는 바뀌게 된다.
parsed as integer
이런 식으로 하게 된다면 앞으로 _arg1과 _arg2 변수는 integer 형태가 된다. 그게 아니더라도 integer 부분에 다른 자료형을 넣으면 그 자료형으로 변환된다.
마치며
"아니 이렇게 끝내? 오늘 내용 왜이리 없음?"
근데 진짜 자료형이 이거 말고 딱히 다룰 게 없다. 정확히 말하면 지금까지 안 내용으로는 이거 이외에 설명이 불가능하다.
일단 지금은 이 내용을 빠삭하게, 확실하게 익히고 나중에 다룰 함수, 이벤트에서 요긴하게 써먹도록 하자.
다음에 해볼 내용은 조건문과 반복문이다. 코드를 더욱 다채롭게 해주는 매력적인 친구이다. 이걸 통해 마인크래프트 공개 서버에서 볼법한 기능을 구현할 수 있게 된다.
그럼 우리 오래봐요!
'[Skript] 공부' 카테고리의 다른 글
| [Skript] 3. 변수 심화 (2) | 2024.11.16 |
|---|---|
| [Skript] 2. 변수 (지역 변수, 전역 변수, 배열 변수) (1) | 2024.11.12 |
| [Skript] 1. 커맨드와 커맨드 옵션 (Command, Command's Options) (4) | 2024.11.08 |