Menu
Coddy logo textTech

메타테이블이란 무엇인가요?

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

메타테이블(metatable)은 단순히 일반적인 Lua 테이블이지만, 특별한 목적을 가지고 있습니다. 다른 테이블(이를 "메인" 테이블이라고 부릅시다)에 메타테이블을 연결하면, 해당 메인 테이블에 특정 연산이 수행될 때의 동작 방식을 변경할 수 있습니다.

이렇게 생각해 보세요: 보통 + 연산자를 사용하여 두 테이블을 더하려고 하면, Lua는 어떻게 해야 할지 몰라 오류를 발생시킵니다. 하지만 메타테이블(metatable)을 사용하면 테이블에 대한 덧셈의 의미를 정의할 수 있습니다. 대응하는 값을 더하거나, 내용을 연결하거나, 프로그램에 적합한 다른 작업을 수행하도록 만들 수 있습니다.

메타테이블은 메타메소드(metamethods)라고 불리는 특별한 함수를 정의함으로써 작동합니다. 이러한 메타메소드들은 덧셈을 위한 __add나 누락된 키를 찾기 위한 __index와 같이 두 개의 밑줄로 시작하는 특정 이름을 가집니다. Lua가 메타테이블이 있는 테이블에서 연산을 수행할 때, 해당 메타테이블에 대응하는 메타메소드가 있는지 확인하고 이를 사용하여 어떤 일이 일어나야 할지 결정합니다.

이 개념은 자신만의 동작을 가진 사용자 정의 데이터 유형 생성, 객체 지향 패턴 구현, 원치 않는 수정으로부터 테이블 보호 등과 같은 다양한 가능성을 열어줍니다. 이어지는 레슨에서는 테이블에 메타테이블(metatables)을 연결하고 메타메소드(metamethods)를 사용하여 동작을 커스터마이징하는 방법을 배우게 됩니다.

치트 시트

메타테이블(metatable)은 다른 테이블에 연결되어 특정 작업에 대한 동작을 변경할 수 있는 일반적인 Lua 테이블입니다.

메타테이블은 이름이 두 개의 밑줄로 시작하는 메타메소드(metamethods)라고 불리는 특별한 함수를 사용합니다:

  • __add - 덧셈 동작을 정의합니다
  • __index - 누락된 키를 조회할 때의 동작을 정의합니다

메타테이블이 있는 테이블에서 작업이 수행될 때, Lua는 해당 메타메소드를 확인하고 이를 사용하여 동작을 결정합니다.

메타테이블을 통해 다음이 가능합니다:

  • 특정 동작을 가진 사용자 정의 데이터 유형 생성
  • 객체 지향 패턴 구현
  • 원치 않는 수정으로부터 테이블 보호

직접 해보기

이 레슨에는 코드 챌린지가 없습니다.

quiz icon실력 점검

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

Logic & Flow의 모든 레슨