No difference found
1. 테이블 기초
오늘은 루아만이 갖고 있는 독특한 자료구조 테이블에 대해서 알아보겠습니다. 루아에서 테이블은 해쉬 테이블과 같은 자료 구조 이상의 역할을 합니다. 테이블은 객체지향적 프로그래밍을 가능하게 해주는 역할도 겹합니다. 무슨 이야기인지는 천천히 설명 드리겠습니다. 우선 간단하게 자료구조로써의 테이블을 살펴 보겠습니다.
해쉬 테이블로 사용하기
만약 테이블을 만들 때 키값이 없다면 어떻게 될까요? 그럼 정수형으로 순차적으로 번호가 매겨집니다. 예를 들면 다음과 같습니다.
Fruit = { "apple","orange","banana" }apple
print ( Fruit1 )
그렇기 때문에 테이블은 배열로도 사용 될 수 있습니다. 그럼 배열에 추가적으로 insert 하고 remove 해 보겠습니다.
Fruit #Fruit + 1 = "grape" -- Fruit 의 아이템 갯수를 얻어 + 1을 해서 마지막 첨자를 구해 값을 대입한다.grape
print( Fruit4 )
이렇게 귀찮게 추가를 할 수도 있지만, 간단히 table.insert(Fruit,"kiwi") 처럼 간단히 할 수도 있습니다. 삭제는 table.remove(Fruit,4) 로 4번째 아이템을 삭제 할 수 있습니다.
그리고 만약 배열로 사용하는 테이블 내의 값들을 정렬하고 싶으면 table.sort를 사용하면 됩니다.
banana
kiwi
orange
table.sort(Fruit)apple
for i = 1,#Fruit do print(Fruiti) end
banana
kiwi
orange
2. 테이블과 함수
지금까지는 간단히 테이블을 자료구조로 사용하였는데, 루아에서는 거의 모든 것이 테이블의 키로 사용 될 수 있기 때문에 테이블과 함수를 연결 할 수 있습니다.
function Car(name)SM3 is running
local car_name = namemyCar = Car("SM3") -- Car 라는 함수를 통해 테이블을 만들고 테이블 내의 함수를 통해 객체 지향 코드 작성
local function Go()
print( car_name .. " is running" )
end
return { Go = Go } -- 여기서 local function Go를 반환하므로 Car에 대한 맴버 함수로 사용할 수 있다.
end
myCar.Go()
myCar:Go()SM3 is running
위의 예제만으로 객체 지향이라고 부르기 좀 부족한 면이 있는 것 같네요. 그럼 좀 더 객체지향적으로 바꿔 볼까요?
Car = {}
function Car:new (obj)
obj = obj or {}mine = Car:new()
setmetatable(obj, self)
self.__index = self
return obj
end
이렇게 만들면 좀 더 객체 지향적으로 만들 수 있습니다. 여기서 setmetatable이라는 함수가 나옵니다. metatable에 대해서는 다음 강의에서 설명하도록 하겠습니다.
3. 마무리
간단하게 테이블에 대해서 배웠습니다. 테이블은 루아에서 가장 중요한 타잎이고 더 다양하게 활용할 수 있습니다. 나중에 좀 더 깊이 테이블에 대해서 써 보겠습니다.
간단하게 테이블에 대해서 배웠습니다. 테이블은 루아에서 가장 중요한 타잎이고 더 다양하게 활용할 수 있습니다. 나중에 좀 더 깊이 테이블에 대해서 써 보겠습니다.