루아 p.13 - 테이블 3

이전 테이블1에서는 테이블을 간단히 배열로써 사용해봤습니다만, 사실 루아의 테이블은 이렇게 단순한 용도가 아니라 좀 더 다양한 작업을 할 수 있습니다. 엄밀히 말하면 테이블은 배열과는 개념이 다릅니다.

  • 테이블은 배열처럼 인수를 항상 연속된 저장 공간에 채워넣는게 아니라, 단순히 해당 인덱스에 값을 저장할 뿐입니다. 따라서, 굳이 인덱스를 1부터 채워갈 필요는 없습니다.

    function main()
        local MyTable = {};
        MyTable[ 11] = "Hello";
        MyTable[ 23] = "World";
    end

  • 테이블은 C언어와는 달리 정수 외에도 문자열을 인덱스로써 사용할 수 있습니다. C언어에 익숙한 사용자라면 이해가 안가겠지만 다음 예제를 보면서 구조를 이해하시기 바랍니다.

    function main()
        local MyTable = {};
        MyTable[ 11] = "Hello";
        MyTable[ 23] = "World";
        MyTable[ "year"] = 2010;
        MyTable[ "month"] = 4;
        MyTable[ "day"] = 5;
        MyTable[ "week"] = "Monday";

        for index, data = in pairs( MyTable) do
            print( "index = " .. index .. ", data = " .. data);
        end
    end

    위 코드를 실행하면 다음 결과가 출력됩니다.

    index = 11, data = Hello
    index = 23, data = World
    index = year, data = 2010
    index = month, data = 4
    index = day, data = 5
    index = week, data = Monday

  • 테이블은 일반 상수값 외에도 변수나 함수를 직접 요소로써 가질 수 있습니다. 이 역시 C언어에 익숙한 사용자라면 더더욱 이해가 안가겠지만, 위의 예제와 동일한 결과를 출력하는 다음 예제를 보면서 구조를 이해하시기 바랍니다.

    MyTable = {};

    MyTable[ 11] = "Hello";
    MyTable[ 23] = "World";
    MyTable[ "year"] = 2010;
    MyTable[ "month"] = 4;
    MyTable[ "day"] = 5;
    MyTable[ "week"] = "Monday";

    -- Add variables
    MyTable.strName = "";
    MyTable.nAge = 0;

    -- Add function
    function MyTable:PrintData()
        for index, data = in pairs( MyTable) do
            print( "index = " .. index .. ", data = " .. data);
        end
    end


    function main()
        MyTable.strName = "John";
        MyTable.nAge = 32;

        MyTable:PrintData();
    end

    테이블에 속한 변수를 호출할땐 테이블 인스턴스명 뒤에 .을 찍고, 함수를 호출할땐 :를 사용한다는 점을 유의하시기 바랍니다.

댓글 없음: