* 변수란? 값을 담아두는 그릇이라고 말할 수 있다. 다른 언어와 마찬가지로 루아도 프로그램을 제작하기 위해서 값을 표현 및 저장하기 위해서 변수를 사용한다. 그럼 루아에서 사용되는 변수에 대해 알아보자.
< 알아둘 점 >
- 루아는 다른언어와 마찬가지로 변수명 생성을 영문또는 _로 시작해야된다. 만약 숫자로 시작하게 된다면 아래와 같은 에러 코드를 출력할 것이다.
<숫자를 변수명으로 지정하여 에러 발생>
- 루아는 예약어를 변수로 사용할 수 없다. 이것도 위와 마찬가지로 사용하게 되면 아래의 에러메시지를 출력한다. ※ 예약어 : 프로그램에 사용되는 함수명 및 타입형으로 선언한 네임(print, for, if, while 등)
<예약어를 변수명으로 지정하여 에러 발생>
루아에 대해서 더 깊히 알아 보시렵니까?? 더보기를 클릭하세요~
a. 변수의 타입 - 루아는 다른 스크립트 언어와 마찬가지로 동적 변수형을 지원한다. c, java를 해보았다면 변수를 정의할때 변수형태를 먼저 적고 변수명을 선언하는것을 알고 있을것이다. (예로 c에서는 int a=10; 이런식으로 int형이라는 것을 먼저 알려야 변수가 선언이 된다.)
루아는 동적 변수형을 지원하며 이러한 변수형태를 선언하지 않고 변수명에 값만 입력하면 그 값에 따라 형태가 자동으로 설정되는 것을 동적 변수형이라고 한다. 간단하게 어떻게 적용되는지 아래의 결과를 보도록 하자
자, 어떤가? 자동으로 값이 입력되고 type()함수를 이용해서 확인해보면 각 값에 맞게 변수형이 자동으로 바뀐걸 확인할 수 있다. 위에서 type()함수는 변수값의 타입을 보여주는 함수이다. 익혀놓도록 하자.
1) nil - nil은 루아에서 사용되는 변수의 형태로 "정상적인 값이 없다!, 할당된 변수가 아니다!" 라는 의미를 지닙니다.즉, 변수가 선언이 되지 않았을때는 nil로 되어있습니다. 그렇다면 변수를 사용하다가 다시 지우기 위해서는 해당 변수에 nil를 할당하면 됩니다. 아래는 nil에 대한 간단한 예제코드 입니다.
2) boolean(부울) - true, false값을 가집니다. c언어에서는 true = 1, false = 0와 같기 때문에 1도 true로 간주합니다. 그러나 루아에서는 1은 절대적인 숫자의 의미이고 true, false는 boolean변수 타입이므로 확실해 true, false를 사용해야 됩니다. 아래는 boolean에 대한 간단 예제코드 입니다.
확인을 위해 1과 true를 넣어서 type를 비교한 결과입니다.
3) 숫자(number) - 정수, 소수를 구분하지 않고 모든 숫자를 나타낸다. c언어의 형태로 보면 모든 숫자를 double형으로 처리한다.
4) 문자열(string) - c언어는 단문자 char형이 있으나 루아는 string으로 나타낸다. 문자열은 ' ' 이나 " " 으로 사용하면 된다.
루아에서는 특별히 문자열 내에 특수문자를 사용할 수 있다. c언어의 개행문자와 같은 형태로 제공한다.
5) 함수(function) - 루아는 함수를 변수의 종류로 여깁니다. 그래서 다른 변수명으로 재정의가 가능합니다. 함수의 사용은 뒤에 루아 함수편에서 자세히 다루도록 하고 여기서는 타입만 알아보도록 하겠습니다. 아래는 간단히 함수를 재정의해서 사용되는 예제입니다.
위 결과와 같이 print함수를 korea로 재정의해서 그대로 사용하는것을 볼 수 있다. 함수형태는 물론 function이다.
6) 테이블(table) - 지금까지 루아를 있게 만들어준 장본인이 이 테이블이라고 할수 있습니다. 그만큼 루아에서 제공하는 기능중에서는 매력적이고 강력한 자료구조입니다. 여기서는 간단히 선언 및 사용만 알아보도록 하고 자세한 내용은 루아 테이블편에서 자세히 다루어 보도록 하겠습니다.
테이블 선언 방법
선언변수명 = {값1, 값2, ... }
위와 같이 테이블은 {}안에 값의 형태로 선언됩니다. >a={1,2,3}
>print(a[1])
1
이렇게 위와 같이 값의 접근은 변수명[index]가 됩니다. 여기서 중요한 내용이 있는데, c언어나 java의 경우 배열의 index 접근은 0부터 시작됩니다. 하지만 루아에서는 무조건 1부터 시작됩니다.
위에서는 간단한 배열의 형태로 사용된 table을 보았습니다. 테이블에는 이외에도 아래와 같이 키값을 줄 수도 있습니다. >a["a"] = 100
>print(a["a"])
100
또 위와 같이 문자열형태로("")된 키값은 아래와 같이 레코드로 접근이 가능합니다. print(a.a)
100
자 위에서 선언된 a["a"]와 a.a는 같다는 것을 알 수 있습니다. 키값이 편리하지만 예약어는 사용될 수 없으므로 주의 하시기 바랍니다. (a["if"]=100 은 에러가 발생됨)
아래는 위의 예제 결과 화면입니다.
7) 코루틴(coroutine) - 스레드 기능을 가집니다. 자세한 내용은 루아 코루틴편에서 자세히 알아보도록 하고 간단히 예제만 보여드리도록 하겠습니다.
8) 지역변수와 전역변수 - 지역변수란 특정 블록내에서만 유효한 변수이며, 전역변수는 프로그램 전체(프로그램 시작에서 종료까지)에 유효한 변수를 말합니다. 루아는 기본적으로 전역변수로 정의되고 지역변수를 사용하기 위해서는 변수명 앞에 local를 붙혀 사용됩니다. 아래 간단한 예제를 보도록 하겠습니다.
여기서는 예제를 위해 간단히 t()함수를 만들어 지역변수와 전역변수의 차이를 확인해 보았습니다. 함수생성 및 기타 자세한 내용은 루아 함수편에서 자세히 다루도록 하겠습니다.
※ 설명 : 먼저 전역으로 a=10을 잡고 t()함수내에 지역변수 b=20을 넣고 print(a), print(b)를 해주었습니다. 함수t()를 실행하면 10과 20이 출력된걸 확인할 수 있습니다. 그 후 a와 b를 차례대로 print()실행하여 a는 출력되었음을 볼 수 있고 b는 t()함수 내에서 선언한 지역변수로 전역에서는 값이 없으므로 nil값이 출력됨을 알 수 있습니다.