루아스크립트 예제 - luaseukeulibteu yeje

루아스크립트 예제 - luaseukeulibteu yeje
달을 상징하는 아름다운 언어 루아입니다.

루아 @

  달을 의미하는 포르투갈의 단어인 루아 스크립트 언어는 가벼운 명령형/ 절처형 언어로, 확장 언어의 사용 목적으로 설계된 언어입니다. 루아가 제시하는 패러다임과 체계를 아래 테이블로 확인할 수 있습니다.

패러다임 다중 패러다임, 스크립트, 명령형, 함수형 등 다양한 패러다임을 제시하는 언어
영향을 받은 언어 C++, CLU, Scheme(Lisp변종 중 하나) SNOBOL
자료형 체계 동적지향, String, DuckType

확장 언어(Glue Language와도 유사한 기능)와 스크립트 언어를 지향하고 있으며, 사이즈가 매우 작아서 많은 플랫폼에서 사용할 수 있지만, 주로 사용되는 분야는 게임에서 스크립트 확장 언어로 가장 많이 사용되는 언어입니다! 또한 작은 사이즈임에도 불구하고 강력한 성능, 효율적이며 순수 C로 작성되어 C와 C++와 환상의 조합을 이뤄낼 수 있는 스크립트 언어입니다. 확장형 언어이기 때문에 Main과 같은 프로그램 진입점은 불필요하다는 점, 장점과 루아만이 가지고 있는 특징이 독특한 스크립트 언어의 일종입니다.

1. 루아 설치

www.lua.org/download.html 

Lua: download

Download Lua is free software distributed in source code. It may be used for any purpose, including commercial purposes, at absolutely no cost. All versions are available for download. The current version is Lua 5.4 and its current release is Lua 5.4.1. T

www.lua.org

위 링크를 타고 들어가게 되면 루아의 소스코드를 받아 직접 빌드해서 사용할 수 있으나, 음 본 블로그에 들어오신 분이라면, 아무래도 루아를 빨리 익히고 싶어서 들어오시는 분들이 많을 것 같다고 생각됩니다.

repl.it/languages/lua

Lua Online Compiler, IDE, Editor, Interpreter and REPL

Code, collaborate, compile, run, share, and deploy Lua and more online from your browser

repl.it

루아스크립트 예제 - luaseukeulibteu yeje

위 링크를 타고 들어가셔서 편하게 웹에서 간단하게 배워볼 수 있는 방향으로 나아가는 것이 좋다라는 생각이 듭니다. macOS나 리눅스 사용자 분들이라면 brew 혹은 apt-get를 이용해서 터미널에서 손쉽게 설치해 lua를 커맨드하여 사용해보실 수 있습니다. 하지만 포스팅의 주 목적은 빠르게 루아를 훑는 것이기 때문에 위와 같은 설정은 시간이 될때 포스팅을 따로 하도록 하겠습니다.

2. 자료형

앞서 설명드렸듯이 루아의 자료형은 기본적으로 동적타입입니다. 사용자의 입력이 "a=1"이라고 들어왔을 시, 동적으로 a의 타입은 정수형으로 결정나는 방식이 동적 타입방식의 과정이라고 볼 수 있습니다. 그렇기 때문에 정적타입언어와는 다르게 굳이 타입을 선언하지 않아도 알아서 타입이 결정나니 얼마나 편한 언어입니까!

= 1

= 2

= a + b

print(c)

= "Hello World"

print(d)

cs

위와 같이 선언될 수 있으며, 스타일을 굳이 따진다면 스크립트 언어 중 하나인 Python과도 많이 비슷할 것 같습니다. a와 b,c는 정수형 변수로 선언되고 d는 문자열 변수가 될 것입니다. 또한 아래에서 표준 출력함수 기능을 담당하고 있는 print와 자료형의 타입에 대한 코드를 기술해보겠습니다.

print "Hello World"

print ("Hello Lua")

print (nil)

= nil

= 2

assert(type(a) == type(b))

cs

print 표준출력함수를 사용하고 괄호를 양옆에 씌워주지 않아도 출력이 가능합니다. 하지만 본인의 코드 스타일 대로 하나로 코드를 작성하는 것이 다른 사람도 알아보기 쉬우며, 코드가 길어질 상황을 대비해서 본인 또한 그렇게 하는 편이 코드를 작성하는데 있어 좀 더 유리한 결과를 이끌어 냅니다. 또한 Python - None and C - NULL이 루아에서는 nil로 선언된다는 점 또한 분명히 기억해두셔야 할 점 입니다. assert함수를 사용해서 변수 a와 변수 b의 타입이 같은지 검사했을 때 결과가 어떻게 나왔을까요? 당연히 Assertion Failed Error가 발생합니다! 타입이 궁금하시다면 type()함수를 사용해 타입을 검사하면 되겠습니다!

다음은 테이블 형입니다. 테이블 형은 어떻게 보면 python의 list와 dict를 합쳐놓은 그런 형태랄까요? 상당히 현대적인 방식으로 자료들을 하나의 구조로 묶어줍니다. 아래 코드를 보면서 확인하도록 하겠습니다.

school = { name = nil , id=nil , "grade", isHigh="No", locale = "seoul""gildong"}

name = "elli"

id = 4

school.name = name

school.id = id

print(school.name)

print(school.id)

print(school.locale)

cs

어후 갑자기 복잡하시다면, 작성된 코드를 천천히 읽어보십시오! 정말 강력하게 선언되는 것을 확인할 수 있습니다. school이라는 테이블에 이름, 번호의 기본 값은 nil로 초기화가 되어있지만 접근이 가능하기 때문에 바로 값을 선언된 변수의 값으로 바꿀 수 있습니다. 또한 초기값을 주는 것도 가능하며, 그냥 "gildong"처럼 어떤 타입의 변수던 루아의 테이블은 받아들입니다. 물론 데이터형이 너무 다양해지고, 대응 값이 많아진다면 복잡하니 쪼개어줘야겠죠?^^;

그리고 루아에서의 테이블 인덱스는 0이 아닌 1에서 부터 시작하니, school[1]이 다른 언어에서의 school[0]과 동일하다는 점은 분명히 알아두셔야 합니다.

3. 함수

함수는 프로그램에 있어서 가장 중요한 기능을 하는, 또 가장 기본적인 기능을 수행하는 역할을 합니다. 함수를 어떻게 잘 나누어 작성하느냐가 프로그램 유지 보수 및 성능에 큰 영향을 미치죠 여튼 각설하고 루아에서의 함수 사용법을 알아봅시다^^:

우선 함수의 키워드는 function을 사용합니다. 즉 function 함수이름(함수 인자... ) 이런 방식으로 사용되며 함수 내부에서의 선언이 모든 종료되면 end키워드를 사용해서 함수의 지역의 엔드포인트를 알려주어야 합니다. 실제 사용 예제를 한번 보도록 하겠습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

function fib(n)

if n < 2 then return n

else  

return fib(n-1+ fib(n-2)

end

end

foo = function()

return 42

end

print(fib(10))

print (foo())

cs

자 첫번째 함수는 아주 간단하게 구현된 피보나치 수열의 합을 구하는 함수가 정의되어있습니다. 현재 레벨에서는 조건문을 학습하지 않았기 때문에 "아 저렇게 사용되는 구나" 하시면 되겠습니다. 앞서 설명드린대로 function --- end로서 함수의 범위가 확정된다는 것을 확인할 수 있습니다.또한 함수의 변수화가 가능합니다. 두번째 foo변수를 보게되면 42만 반환되는 함수의 기능을 가지고 있습니다. 그리고 함수에서 중요한 점은 전역 변수와 지역변수입니다. 물론 전역과 지역의 차이를 여러분들 아실거라 생각이 들지만, 다시 한번 설명을 드리면, 전역 변수는 정의된 코드 상에서 어디든지 사용될 수 있는 변수이고, 지역 변수는 함수의 지역, 클래스 내의 지역 등 범위 지정자에 한해서 범위가 제한되어 사용되는 변수입니다. 물론 이렇게 말씀드리면 이해하기 힘들 수 있으니 코드로 확인 해보도록 하겠습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function chkLocal(foo)

local bar = foo * 42

return bar

end

function chkGlobal(foo)

bar = foo * 42

return bar

end

bar = 20

= chkLocal(bar)

print(bar, i)

= chkGlobal(bar)

print(bar, j)

cs

위의 코드는 결과값을 알려드려야겠군요 우선, 물론 지금 제가 작성하는 코드 및 설명드리는 내용은 모두 직접 코드를 작성해보셔야합니다!

RESULT > 20 840

RESULT > 840 840

첫번째 chkLocal()함수의 bar는 local키워드가 선언부에 결합되어, 지역변수로 정의되었음을 알려줍니다. 그렇기 때문에 bar를 반환해도 전역 변수 bar의 값은 바뀌지 않고 그대로 20이 출력이 되었습니다. 하지만 아래 chkGlobal()함수의 결괏값을 보게 되면 840이 출력되었습니다. local키워드가 붙지 않았기 때문에 해석 과정중에 전역 변수에 이름이 동일하게 정의된 변수가 존재해서 전역 변수로 계산되어 결괏값이 반환된 것입니다. 여러분들 코드작성하면서 절대 절대 혼동하지 마세요!!

그 다음 포스팅은 제어문과 조건문 등 남은 기능을 설명하면서 루아에 대한 설명을 마치도록 하겠습니다. 물론 제 포스팅만으로는 루아를 마스터할 수 없습니다. 어떤 언어든 마찬가지입니다. 하지만 이렇게 루아가 작성되고 동작하는 과정에 대해서는 자세하게 설명드리도록 노력하겠습니다!!

댓글로 피드백 환영합니다!!^^

hazarddev.tistory.com/35

LUA스크립트 눈 깜짝할 새 배우기@#2

Lua#2 1. 조건문, 반복문 루아 언어에서의 조건문과 반복문은 개인적인 생각으로 간단히 선언되면서도, 직관적인 표현, 단순하게 표현이 가능합니다. 우선 그 중에서 조건문은 if then elseif else end

hazarddev.tistory.com

루아스크립트 예제 - luaseukeulibteu yeje

2부 포스팅 완료했습니다!!^^