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)를 정의할 준비가 된 것입니다.
챌린지
쉬움mainTable과 metaTable을 인자로 받아 메타테이블이 성공적으로 연결되었으면 true를 반환하는 attachMetatable 함수를 작성하세요.
setmetatable()을 사용하여 메타테이블을 메인 테이블에 연결한 다음, getmetatable()을 사용하여 연결을 확인하세요.
로직:
setmetatable()을 사용하여metaTable을mainTable에 연결합니다.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
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Logic & Flow의 모든 레슨
4메타테이블 소개
메타테이블이란 무엇인가요?setmetatable & getmetatable__index 메타메소드__newindex 메타메소드__tostring 메타메소드산술 메타메소드 파트 1산술 메타메소드 파트 2복습 - 읽기 전용 테이블