본문 바로가기
루아(LUA)

메타테이블 #1

by JK77 2022. 1. 15.

메타테이블을 이용하면 테이블에 테이블을 더하거나, 함수를 서로 비교하거나, 문자열을 호출할 수 있다. 또한 정의되지 않은 연산을 처리할 수 있다. 예를 들어 테이블 a와 테이블 b에 대해 a+b와 같은 표현식을 계산하는 방법을 정의할 수 있다.

 

루아의 모든 값은 연관된 메타테이블을 가질 수 있다. 모든 테이블과 유저데이터에는 각각 메타테이블이 따로 있다. 그리고 새로운 테이블을 생성하면 항상 메타테이블이 없이 생성된다. getmetatable 명령어로 메타테이블의 유무를 확인할 수 있다. 다음 코드를 보자. 새로 생성한 테이블에는 메타테이블 값이 nil이다. 

t = {}
print(getmetatable(t))  --> nil

이제 메타테이블을 만들고 메타테이블을 설정해 보자. 모든 테이블을 setmetatable을 이용해서 메타테이블을 설정하거나 변경할 수 있다.

t1 = {} -- 임의의 메타테이블을 생성한다.
setmetatable(t, t1) -- 't1'을 't'의 메타테이블로 설정한다.
print(getmetatable(t) == t1)  --> true