메뉴 건너뛰기

창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳

[Lua] 테이블

노루발

이것은 Lua 문법입니다. Love2D와는 관계가 없습니다. 

안녕하세요, 노루발입니다. 오늘은 테이블에 대해서 설명을 해보겠습니다.

 

테이블이란 쉽게 말해 변수를 묶은 겁니다.

Lua상에서 뭔가 쌈빡하게 테이블을 쓰는 법도 있는 듯 하지만 저는 그냥 타 언어의 배열처럼 씁니다.

그러므로 이제부터 제가 하는 설명은 배열에 대한 설명으로 보셔도 무방합니다.

 

여기서 잠깐 테이블의 필요성에 대해 알아보도록 하겠습니다.

예를 들어, Switch라는 변수가 있다고 칩시다.

1은 켜짐, 0은 꺼짐입니다. (뭐에 쓰는지는 묻지 말아주세요. 다 좋은 데 쓸 겁니다. :/ 그냥 그런 게 있다고 칩시다.)

이 변수가 10개 필요하다면? 배열 없이는 다음과 같이 해야 하지요...

Switch1 = 0 

Switch2 = 0 

Switch3 = 0 

... 

Switch9 = 0 

Switch10 = 0

 

하지만 테이블을 사용하면? For문으로 해결할 수 있습니다.

local a

Switch = {} 

for a = 1, 10 do

    Switch[1] = 0

end

 

만일 10개가 아니라 100개가 필요하다면 테이블을 사용하는 것이 훨씬 이득일 겁니다.

 

대충 테이블에 대해 살펴보았고, 테이블의 필요성에 대해 살펴봤으니 이제 테이블을 만들어 보겠습니다.

 

t = {} -- t라는 이름의 테이블을 만들었다고 알려줍니다.

t["키"] = 값

 

여기서 잠시, 키와 값에 대해 설명하겠습니다.

사우나에 가면, 옷장에 번호가 붙어 있습니다. 5번, 33번, 48번.. 이런 식으로요.

번호는 옷장 안의 내용물을 찾기 쉽게 해 줍니다.

테이블의 키도 마찬가지입니다. 키는 사우나 옷장에 붙어있는 번호와 같아서, 원하는 부분의 내용을 쉽게 꺼낼 수 있게 합니다.

키는 꼭 숫자일 필요는 없습니다. 아래 두 예 모두 맞는 예제입니다.

bulletx[1] = 30

player["status"] = "running"

 

값은 뭐냐고요? 테이블 안에 들어가는 겁니다.

위의 예제에서는 30이랑 "running"이 값이 될 수 있겠군요.

그리고, 테이블 안에 또 다른 테이블이 들어갈 수 있습니다.

예를 들어:

t[1] = {}

t[1][5] = 0

이런 것이 가능합니다.

 

슬슬 본격적으로 테이블을 사용하는 방법을 알려드리겠습니다.

변수를 테이블로 사용하겠다고 선언하는 것은 이미 봤습니다. 

예:

t = {} 

 

테이블 안에 값을 넣는 방법은, 일반적인 변수와 같습니다.

예: 

player["x"] = 30

 

값을 읽는 법도 일반적인 변수와 같습니다. 

 예:

print("플레이어의 X값:"..player["x"])

 

특정 키를 가진 테이블을 만들고 싶으면 아무것도 할 필요 없습니다. 그냥 값을 넣으면 됩니다.

유연하죠?

예:

local a

Switch = {} 

for a = 1, 10 do

    Switch[1] = 0

end

-- 이제 10개의 Switch가 만들어졌다.

Switch[11] = 0 --11번째 Switch다! 

 

가끔씩 모든 테이블의 내용을 불러오고 싶을 때가 있습니다. (모든 총알의 위치를 위쪽으로 올리는 것 같은..)

그 때는 #테이블이름 (위의 예제대로는 #t, #bulletx, #player)을 쓰면 테이블의 마지막 키를 알 수 있습니다.

예제 코드:

local a

t = {}

for a = 1, 30 do

    t[a] = "mumblemumble.." 

end

print(#t) 

 

결과:

30  

 

뭔가 자세히 설명하고 싶었는데 제 능력이 부족해서 잘 되었을지 모르겠네요 ;_;

다음 링크(영어)에 테이블에 대해 자세히 설명되어있지는 않지만.. 테이블로 할 수 있는 몇 가지 예제에 대해 나와 있습니다. 

lua-users.org/wiki/TablesTutorial

조회 수 :
1422
등록일 :
2013.09.17
08:13:58 (*.209.135.92)
엮인글 :
게시글 주소 :
https://hondoom.com/zbxe/index.php?mid=study&document_srl=703416
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
185 자동화된 Lua 스크립트의 문서화 - LDoc 노루발 2021-01-11 43226
184 VC++ 2008 Express Edition에서 문D라이브 링크 [2] A.미스릴 2008-04-17 13090
183 cocos2d-x 터치와 업데이트 활성화 시키기 똥똥배 2011-10-27 10656
182 문D 질문 #2 [1] A.미스릴 2008-06-01 8797
181 MFC 더블 버퍼링 질문 [2] A.미스릴 2008-06-13 6602
180 문D라이브로 만드는 더블드래곤.. 질문입니다 [4] 하와이안 2009-01-15 5550
179 임의의 점이 다각형 내부에 있는지 검사하는 함수 똥똥배 2008-04-14 5358
178 문D라이브로 더블드래곤을 만들자(11) file 똥똥배 2008-05-17 4647
177 문D라이브로 더블드래곤을 만들자(1) [2] file 똥똥배 2008-04-16 4479
176 씨언어 질문 (내일 시험 ㄷㄷ) [1] 쿠로쇼우 2008-06-17 4331
175 문D라이브도 더블버퍼링이 필요한가요? [3] A.미스릴 2008-06-28 4223
174 문D라이브로 더블드래곤을 만들자(10) file 똥똥배 2008-05-17 4065
173 #define에 대해 [1] A.미스릴 2008-05-19 4061
172 클레스들을 담은 헤더들의 혼란 [4] A.미스릴 2008-06-21 3892
171 srand에 관해서 [4] A.미스릴 2008-07-15 3868
170 문D 질문 [5] A.미스릴 2008-05-26 3847
169 흥크립트에 궁금한점 [4] 상상악수 2008-08-21 3835
168 C++ 질문 [1] A.미스릴 2008-12-21 3818
167 TinyXML의 한계 [2] 똥똥배 2011-12-11 3756
166 문D라이브 2008년 5월 19일 버전 [2] 혼돈 2008-06-02 3747