Menu
Coddy logo textTech

__tostring 메타메소드

Coddy Lua 여정의 로직 및 흐름 제어 (Logic & Flow) 섹션에 포함된 레슨. 54개 중 20번째.

Lua에서 테이블을 print하면 일반적으로 table: 0x5f8a20처럼 도움이 되지 않는 내용, 즉 메모리 주소만 표시됩니다. __tostring 메타메서드를 사용하면 테이블이 문자열로 변환될 때 정확히 무엇을 표시할지 정의하여 이 동작을 변경할 수 있습니다.

이 메타메서드는 디버깅과 더 깔끔한 출력을 만드는 데 특히 유용합니다. Lua가 테이블을 문자열로 변환해야 할 때(예를 들어 print()를 사용할 때), 테이블에 __tostring 필드가 있는 메타테이블이 있는지 확인합니다. 메타테이블이 있으면 Lua는 해당 함수를 호출하고 기본 표현 대신 그 반환 값을 사용합니다.

다음과 같이 구현할 수 있습니다:

local vector = {x = 3, y = 4}
local meta = {
    __tostring = function(t)
        return "Vector(" .. t.x .. ", " .. t.y .. ")"
    end
}

setmetatable(vector, meta)

print(vector)  -- 출력: Vector(3, 4)

__tostring 함수는 테이블을 인수로 받아 문자열을 반환해야 합니다. 이 예제에서는 벡터의 x 및 y 값을 읽기 쉬운 형식으로 보여 주는 형식화된 문자열을 구성합니다.

이렇게 하면 코드를 훨씬 더 쉽게 다룰 수 있습니다. 디버깅 중에 암호 같은 메모리 주소를 보는 대신, 테이블에 무엇이 들어 있는지에 대한 의미 있는 정보를 얻을 수 있습니다.

challenge icon

챌린지

쉬움

createPoint 함수를 작성하여 xy 좌표를 받고 사용자 지정 문자열 표현을 포함하는 포인트 테이블을 반환하세요.

xy 필드가 있는 테이블을 생성하고, __tostring 메타메서드가 있는 메타테이블을 연결한 다음, 테이블을 tostring()을 사용해 문자열로 변환한 결과를 반환하세요.

로직:

  • 제공된 좌표를 값으로 갖는 xy 키가 있는 테이블을 생성합니다
  • "Point(x, y)" 형식의 문자열을 반환하는 __tostring이 있는 메타테이블을 생성합니다
  • setmetatable()을 사용하여 메타테이블을 포인트 테이블에 연결합니다
  • 사용자 지정 문자열 표현을 얻기 위해 tostring(point)를 반환합니다

매개변수:

  • x (number): 포인트의 x 좌표
  • y (number): 포인트의 y 좌표

반환값: "Point(x, y)" 형식의 포인트 사용자 지정 문자열 표현 (string)

직접 해보기

function createPoint(x, y)
    -- 여기에 코드를 작성하세요
end
quiz icon실력 점검

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

로직 및 흐름 제어 (Logic & Flow)의 모든 레슨

직접 연습해 보세요: 온라인 Lua 컴파일러