Menu
Coddy logo textTech

setmetatable & getmetatable

Coddy Lua 여정의 Logic & Flow 섹션에 포함된 레슨 — 54개 중 17번째.

이제 메타테이블이 개념적으로 무엇인지 이해했으므로, 실제로 이를 어떻게 다루는지 배울 차례입니다. Lua는 이를 위해 두 가지 필수 함수를 제공합니다: 테이블에 메타테이블을 연결하는 setmetatable()과 이를 가져오는 getmetatable()입니다.

테이블에 메타테이블을 연결하려면 setmetatable()을 사용합니다. 이 함수는 두 개의 인자를 받습니다: 수정하려는 테이블(메인 테이블)과 여기에 연결하려는 메타테이블입니다:

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

이 예제에서 myMetatable은(는) 이제 myTable에 연결되었습니다. 메타테이블 자체는 현재 비어 있지만, 이는 두 테이블 간의 연결을 설정합니다. setmetatable() 함수는 또한 메인 테이블을 반환하므로, 필요한 경우 작업을 체이닝(chain)할 수 있습니다.

테이블에 연결된 메타테이블을 가져오려면 getmetatable()을 사용합니다:

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- 출력: true

이 함수는 메타테이블이 연결되어 있으면 메타테이블을 반환하고, 테이블에 메타테이블이 없으면 nil을 반환합니다. 이는 테이블의 메타테이블이 설정된 후 이를 확인하거나 수정해야 할 때 유용합니다.

이 두 함수를 이해하는 것은 Lua의 모든 메타테이블(metatable) 작업의 기초입니다. 메타테이블을 연결하고 가져올 수 있게 되면, 테이블의 동작 방식을 변경하는 메타메소드(metamethod)를 정의할 준비가 된 것입니다.

challenge icon

챌린지

쉬움

mainTablemetaTable을 인자로 받아 메타테이블이 성공적으로 연결되었으면 true를 반환하는 attachMetatable 함수를 작성하세요.

setmetatable()을 사용하여 메타테이블을 메인 테이블에 연결한 다음, getmetatable()을 사용하여 연결을 확인하세요.

로직:

  • setmetatable()을 사용하여 metaTablemainTable에 연결합니다.
  • getmetatable()을 사용하여 연결된 메타테이블을 가져옵니다.
  • 가져온 메타테이블을 원래의 metaTable과 비교합니다.
  • 일치하면 true를, 그렇지 않으면 false를 반환합니다.

매개변수:

  • mainTable (table): 메타테이블이 연결될 테이블
  • metaTable (table): 연결할 메타테이블

반환값: 메타테이블이 성공적으로 연결되고 확인되면 true, 그렇지 않으면 false (boolean)

치트 시트

Lua는 메타테이블(metatable) 작업을 위한 두 가지 필수 함수를 제공합니다:

setmetatable() - 테이블에 메타테이블을 연결합니다. 두 개의 인자를 받습니다: 메인 테이블과 연결할 메타테이블입니다. 메인 테이블을 반환합니다.

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

getmetatable() - 테이블에 연결된 메타테이블을 가져옵니다. 메타테이블이 연결되어 있으면 메타테이블을 반환하고, 테이블에 메타테이블이 없으면 nil을 반환합니다.

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- 출력: true

직접 해보기

function attachMetatable(mainTable, metaTable)
    -- 여기에 코드를 작성하세요
end
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨