메뉴 건너뛰기

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

[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

조회 수 :
1727
등록일 :
2013.09.17
08:13:58 (*.209.135.92)
엮인글 :
게시글 주소 :
https://hondoom.com/xe/study/703416
List of Articles
번호 제목 글쓴이 날짜 조회 수
185 Bootstrap4 container class가 적용된 div의 양 옆에 설정하지 않은 margin이 생김 노루발 2024-02-07 662
184 express.js 세션 적용 후 리다이렉트 시 세션 적용이 제대로 안 되는 문제점 노루발 2024-02-07 554
183 illegal character 방지 [3] 노루발 2023-07-17 746
182 Lua-love2d TCP 통신 [1] 노루발 2023-07-14 737
181 PHP로 웹게임 만드는 영상 [1] 노루발 2021-06-25 1554
180 팁 certbot을 이용한 HTTPS 인증서 발급 및 적용 노루발 2021-01-12 687
179 Love2d 게임 안드로이드로 패키징하기 노루발 2021-01-11 703
178 팁 자동화된 Lua 스크립트의 문서화 - LDoc 노루발 2021-01-11 44088
177 팁 리캡챠 적용 [1] 노루발 2021-01-08 699
176 팁 Oracle cloud에 Nginx/MariaDB 설치하기 노루발 2020-12-06 691
175 팁 Love2d로 만든 로그라이크 예제 노루발 2020-11-30 979
174 팁 Love2d 이미지 하얗게 그리기 노루발 2020-11-23 658
173 팁 루아 스타일 가이드 노루발 2020-11-19 708
172 팁 턴 기반 시스템 구현에 대한 글 [4] 노루발 2020-11-14 1266
171 팁 이쁜 눈나가 유니티 개발 알려주는 재생목록 노루발 2020-11-12 668
170 팁 love2d에서 안드로이드 터치 제스처 인식하기 노루발 2020-11-12 645
169 팁 특정좌표를 기준으로 zoom in/zoom out하기 노루발 2020-11-11 721
168 팁 Lua 클래스 만들고 활용하기 노루발 2020-11-06 655
167 팁 Lua 테이블 안에 함수 저장하기 노루발 2020-11-06 652
166 팁 Lua 인수로 nil값이 들어왔을 경우 처리하기 노루발 2020-11-06 698