'Lua'에 해당되는 글 1건

  1. 2011.11.05 [Lev 0] Lua 기본 정보

※ Lua에 대한 기본 정보에 대해 게시합니다. 

Lua에 대한 기본적인 테스트는 Lua 마당에서 제공하는 LuaWin을 사용할 예정입니다.

[ 참고 프로그램 ]
Lua Source Code : http://www.lua.org/work/
LuaWin : http://cafe.naver.com/luamadang/81

[ 참고 Path ]
Lua 공식 사이트 ( 영문 ) : http://www.lua.org/home.html
Lua Project ( 영문 ) : http://luaforge.net/projects/
Lua Wiki ( 영문 ) : http://lua-users.org/wiki/
Lua 마당 ( Lua 네이버 카페 ) : http://cafe.naver.com/luamadang/

[ 참고 서적 ]
루아 프로그래밍 - 번역서 ( Lua Programming ) : http://www.yes24.com/24/goods/2605347

[ Lua For Windows 설치 환경 및 방법 ]
Lua ( for windows, 영문 ) : http://code.google.com/p/luaforwindows/downloads/list
   - 위의 사이트에서 LuaForWindows의 원하는 Version을 찾아서 다운받아 설치하면 된다 . 


[ Lua 특징 - 장점 ]
* C/C++의 코드를 이식하기 쉽다.
  - 엔진작업.스크립트(게임제작0 작업의 분업화를 가능하게 해준다. 반대로 Lua Code를 C/C++ 에서 실행하는
     것도 가능하다. 
* 동종 스크립트 언어중에서 최강의 속도와 효율을 자랑한다. 
* Table 이라는 강력한 연관배열을 지원한다. 이것은 스크립트 제작시 자료의 정리를 상당히 용이하게 해준다. 
* 문법이 간단하다.
  - 데이터 타입이 존재하지만 사용시에는 숫자, 문자열 정도만 구분하면 되며 왠만한 경우는 자동으로 변환을
     수행한다 .

[ Lua 특징 - 단점 ]
* 스크립트 언어라면 모두 가지고 있는 Garbage Collection이 존재한다. 
   - 사용되지 않는 메모리가 일정 정도 차게되면 자동으로 해제해 버린다. 이것은 성능저하, 직접적인 메모리 관리의
     어려움등의 단점을 만든다. 단, Lua 5.0 이후 버전에서는 처리의 한도를 조정할 수 있어 이 현상이 이러나지 않도
     록 만들 수 있다 .
* 간단하고 심플한 대신, 지원하는 함수가 정말로 기본적인 것 밖에 없다. 

[ Lua 타입 ]
* nil : 아무것도 없는 값, 초기화할 때 사용한다.  
         ( C/C++의 NULL은 정수 0을 의미하는 것이고 Lua의 nil은 그냥 비어있는 상태를 의미한다. )
* number : 사칙연산이 가능한 모든 숫자
                ( Lua는 정수와 실수를 따로 구분하지 않는다. )
* string : 문자열, " " 로 쌓여있다.
   = 제어 함수 =
   문자열 라이브러리의 모든 함수는 테이블 string 내에 담겨있다.
   예) string.byte( s, [,i] ) : 문자열 s 내의 i번째 문자를 반환 ( 형태 : ASCII ) 한다. 
        string.char( i1, i2, ... ) : 문자열 s 내의 1번째, 2번째 문자를 반환 ( 형태 : ASCII ) 한다. 
        string.find( s, pattern [ , init[ , plain]] ) : 문자열 s 에서 pattern과 부합되는 첫번째 부분을 반환한다. 
        string.len( s ) : 문자열 s 의 길이를 반환한다. 
        string.lower( s ) : 문자열 s 를 모두 소문자로 바꾸고 복사본을 반환한다. ( 원본은 유지한다. )
        string.rep( s, n ) : 문자열 s 를 n 번 반복하여 모두 병합한다. 
        string.sub( s, i, [,j] ) : 문자열 s 내에서 i에서 시작하고 j에서 끝나는 부분에 대한 문자열을 반환한다.  
        string.upper( s ) : 문자열 s 를 모두 대문자로 바꾼다. 
        string.format( formatstring, e1, e2, ... ) : 첫번째 인자로 주어지는 정의를 따라서 다양한 수의 인자들을
                                                                 잘 포맷한 결과물을 반환하다. ( ≒ printf() )
 
* userdata : C/C++과 교류를 위해 사용하는 값, Handle로 지정되는 타입
* function : Lua에서는 function 또한 하나의 값으로 취급한다. 실행/function 타입의 변수에 값 대입도 가능하다. 
* table : 범용 자료구조 타입, 사용법이 복잡하고 다른 타입으로 변환이 불가능하다. 
   = 제어 함수 =
   예) table.foreach( table, function ) : table의 각 값에 대해 각각의 function을 실행한다. 
        table.foreachi( table, function ) : table의 각 값에 대해 인덱스 순서대로 function을 수행한다. 
* Thread
   - 함수에서 시작한다.
   - 함수단위로 만들수 있다. 
   - CoRoutine에 의해 관리된다. 
   - C/C++에 의해 만들어지는 Thread와는 다르지만 그 역할은 같다.
   1) Thread ( CoRoutine  ) 관련 함수
      - coroutine.create( 함수명 ) : 해당 함수를 thread로 생성한다. 기본상태는 Suspend 이다. 
      - coroutine.status( thread 식별자 ) : thread 식별자에 해당하는 Thread의 상태를 출력한다.
      - coroutine.resume( thread 식별자 ) : thread 식별자에 해당하는 Thread를 실행시킨다. ( run )
      - coroutine.yield( ) : thread 처리 권한을 다른 thread로 바꾼다. 
    2) 인자가 있는 Thread ( CoRoutine ) 만들기


[ Lua 함수 ]
Lua에서 함수란 일정한 실행 단위를 어느 순간에 한꺼번에 실행하기 위해 하나의 값으로 선언해 놓은 것.
즉, 함수값을 가지는 변수는 그 자체로 실행이 가능하다.
[ Lua 제어문 ]
* 비교를 위한 연산자
   - == : 동일 비교
   - ~= : 다름 비교
   - >= , <= , < , > : 크기 비교
   - not : 부정
   - and : "그리고"
   - or : "또는"
   - true : 참
   - false : 거짓

* if문
if ( 조건 ) then
     조건이 참일 경우 처리문
elseif  ( 조건 ) then
     조건이 참일 경우 처리문
else
     조건이 거짓일 경우 처리문
end

* while문
지정한 조건이 true값을 반환할 동안 반복적으로 실행한다. 
while ( 조건문 ) do .... end

* repeat문
지정한 조건이 true가 될때가지 반복적으로 실행한다. 
repeat ... until ( 조건문 )

* for문
   ※ for문에서 사용하는 변수는 기본적으로 Local 변수로 선언된다. 
   - Numberic For문 : Index 증감에 의한 데이터 접근
        for variable = from_exp , to_exp[ , step_exp ] do block end
              :: 변수 variable은 for문 반복이 시작되기 이전 from_exp로 초기화 된다. 
                 (종료조건) to_exp가 될때까지 block가 수행된다.  
   - Generic For문 : Iterators에 의한 데이터 접근
      for var { , var } in explist do block end
              :: explist는 Loop ( for문 ) 들어가기 전 평가하는 함수로 iterator function이라고 한다. 
                 즉, 컨테이너에 보관되어 있는 데이터들을 하나하나 방문하면서 explist 를 통해 실행여부를 판단하고
                 조건에 부합되면 block 을 수행한다.
      - explist ( = iterator function )
         - pairs( table ) : Table의 Key-Value 쌍을 모두 처리하지만 Key에 의한 순차처리는 이뤄지지 않는다. 
           예) for key, value in pairs( table ) do print( key, value ) end
         - ipairs( table ) : Table의 Key-Valu 쌍에 대한 순차처리를 하지만, 순차적이지 않은 Key에 대해서는 처리
                                 하지 않는다. 
           예) for key, value in ipairs( table ) do print( key, value ) end
                                 ipairs( )와 다르게 순차처리를 하면서 순차적이지 않는 Key에 대해서도 모두 처리하려면
                                다음과 같이 Next를 사용하면 된다. 
           예) for key, value in next , t, nil do print( key, value ) end

[ Lua 주석문 ]
* 한줄 주석 : --
* 구간 주석 : --[[ ..... ]]--

[ Lua 변수 ]
Lua는 기본적으로 변수 타입이 존재하지 않으며 변수에 값을 입력하는 순간 자동으로 변수의 타입이 결정된다. 

* 전역 변수 와 지역 변수
Lua에서는 기본적으로 변수는 전역 변수를 의미한다. 따라서 지역 변수를 선언하려면 예약어 "local" 에 의해 선언된 변수에 대해서만 지역 변수로 동작하게 된다.  

[ Lua 타입 - Table ]
* Table 생성
   - { }로 하면 Table로 선언되지만 기본적으로 그 내용은 비어있다. 
   예)   t = {}

* 배열로서의 Table
   - { }로 생성할 때 배열의 각 요소들을 콤마( , )로 구분하여 정의하면 배열로 인식하게 되며 [ Index ]로 접근할 수
      있게 된다.  
   예) t = { 1,1,2,3,3,4,6,7,8 }
        print( t[3] )
        Output - 2  ( C/C++과 다르게 배열의 시작 Index는 1이다. )
   - Table로 제작된 배열을 1차원이 아닌 다차원 배열( Matrix )로도 작성할 수 있다 .

* Table의 크기 알아내기
   - # 연산자를 이용하면 Table의 크기를 알 수 있다. 

* Table에 값 추가하기
   예) table.insert( t, 8 )
        table.insert( t, 1, 0 )

* Table에서 특정 값 지우기
   예) table.remove( t, 5 )
 
* Table Key 
   - Lua에서는 Table이 Key - Value 쌍으로 이뤄져 있다. 

[ Lua 구조체 - Linked List ]
* Linked List 생성
   예) list = nil

* Linked List 구성
   - Lua는 C/C++의 배열과 달리 기본적으로 Dynamic Entry로 되어 있기 때문에 Linked List를 구성하기 위해서
     신규 항목만 추가하면 자동으로 연결되는 방식을 띈다. 
   예) list = { next = list, value = v1 }
        list = { next = list, value = v2 }
        list = { next = list, value = v3 }
        ........
   - 위의 예제와 같이 추가하면 list.next에는 다음 list의 주소가 들어가고 list.value는 해당 Linked List에 맞는 값이
     들어가게 된다 





 
Posted by GhostKei
,