i변수(iVariable)

i변수란?

변수는 어떠한 값을 저장해서, 필요할 때마다 꺼내쓸 수 있도록 해주는 것입니다.

커맨드헬퍼에서 일반 변수는 명령어에서 사용하는 $ 변수이지만, 커맨드헬퍼 프로그래밍에서 사용하는 @ 변수인 i변수가 있습니다.

이 i변수는 코드의 성능을 최적화 하거나, 코드를 보기 쉽게 할 때 사용할 수 있습니다.

i변수를 선언하는(만드는) 방법

i변수를 선언하는 방법은 두가지가 있습니다. @변수이름 = 값 으로 연산자 구문을 이용하거나, assign(변수이름, 값) 으로 펑션을 사용하는 방법이 있습니다.

여기에서는 두가지 전부 알아보도록 하겠습니다.

예제 1.

/test $player = >>>
    @player = $player
    msg(@player)
<<<

결과: 실행한 플레이어의 이름을 플레이어에게 보냅니다.

변수(Variable) 와 비슷하게, $@ 으로 바뀌고 코드 작성시 값을 지정할 수 있다는 점만

바뀐 형태라고 생각하시면 됩니다. 이때 변수와 i변수의 이름은 겹쳐도 서로 다른 것으로 인식합니다.

위 코드는

/test $player = >>>
    assign(@player, $player)
    msg(@player)
<<<

와 동일합니다.

예제 2.

/test = >>>
    @variable = 1
    msg(@variable)
<<<

/test2 = >>>
    msg(@variable)
<<<

결과: /test 를 실행하면 "1" 이라는 메시지가 표시되지만, /test2 를 실행하면 변수가 비어있다는 오류가 납니다.

변수는 내가 변수를 선언한 곳(명령어 블록 안이라면 명령어 블록 안, 바깥이라면 안팎 전부) 바깥에서는 사용할 수 없습니다.

내가 변수를 선언한 곳 바깥에서도 사용하려면 전역 변수 혹은 영구 변수를 이용해야 합니다.

전역 변수(import()/export())

전역 변수는 내가 어느 곳에서든 변수를 선언해도 어느 곳에서든 사용할 수 있다는 장점이 있습니다.

하지만 전역 변수는 서버가 꺼지거나 커맨드헬퍼가 리로드되면 사라지기 때문에, 데이터의 저장은 영구 변수를 이용해야 합니다.

전역 변수의 사용

전역 변수는 import(), export() 두 펑션을 이용하는데,

값을 저장하고 사용하는 방법 중 저장하는 데에만 펑션(assign()) 을 쓰는 일반 변수(이제부터는 지역 변수라고 지칭) 와 달리 값을 저장하고 사용하는 데에 전부 펑션을 사용합니다.

export() 펑션을 이용하여 값을 저장하고, import() 펑션을 이용하여 값을 사용합니다.

예제.

/exportvalue = export('test', '테스트')

/importvalue = msg(import('test'))

결과: /importvalue 를 하면 "null" 이 전송되지만, /exportvalue/importvalue 를 하면 "테스트" 가 전송됩니다.

전역 변수는 일반 변수와 달리 존재하지 않는 값을 찾으려고 하면 오류 대신 null 이 반환됩니다.

영구 변수(store_value()/get_value())

영구 변수는 전역 변수와 거의 같지만, 영구적으로 저장할 수 있고 몇가지 제약이 있다는 점이 있습니다.

영구 변수의 사용

영구 변수의 사용법은 기본적으론 import()/export()get_value()/store_value() 으로 변경된 것 뿐입니다.

하지만 영구 변수는 하드디스크에 저장하기 때문에 기본적으로 속도가 느리고, 클로저는 저장할 수 없다는 단점이 있습니다.

또한 네임스페이스라는 다른 기능이 있는데 이는 영구 변수 에서 다룹니다.

예제.

/storevalue = store_value('test', '테스트')

/getvalue = msg(get_value('test'))

결과: /getvalue 를 하면 "null" 이 전송되지만, /storevalue/getvalue 를 하면 "테스트" 가 전송됩니다. 서버를 껐다 켜고 /storevalue 를 하지 않고 /getvalue 를 해도 "테스트" 가 전송됩니다.

다음 추천 강좌

연산자 구문