루아 p.14 - 루아 테이블 상속

루아 테이블에는 기본적으로 상속 기능은 없습니다만, C언어의 클래스 상속과 비슷한 기능을 흉내낼 수는 있습니다. 다음 예제를 통해서 살펴보도록 합니다.

  • C언어

    // MyClass
    class MyClass
    {
    private:
        string m_strName;
        int m_nAge;

    public:
        virtual void SetName( string& strName) = 0;
        virtual void SetAge( int nAge) = 0;
    };


    // NewMyClass
    class NewMyClass : public MyClass
    {
    public:
        virtual void SetName( string& strName);
        virtual void SetAge( int nAge);
    };

    void NewMyClass::SetName( string& strName)
    {
        m_strName = strName;
    }

    void NewMyClass::SetAge( int nAge)
    {
        m_nAge = nAge;
    }

  • 루아

    -- MyClass
    MyClass = {};

    MyClass.m_strName = "";
    MyClass.m_nAge = 0;

    function MyClass:new()
        instance = {};
        setmetatable( instance, self);
        self.__index = self;
        return instance;
    end

    function MyClass:SetName( strName)
    end

    function MyClass:SetAge( nAge)
    end


    -- NewMyClass
    NewMyClass = MyClass:new();

    function NewMyClass:SetName( strName)
        MyClass.m_strName = strName;
    end

    function NewMyClass:SetAge( nAge)
        MyClass.m_nAge = nAge;
    end

위 예제처럼 부모 테이블에 새 인스턴스를 생성해서 반환해주는 new 함수를 만들고, 새 테이블을 생성할 때 이 함수를 호출함으로써 부모의 기능을 상속 받습니다. 또한, 부모의 함수를 다시 정의하면 함수 오버라이딩(overriding)이 가능합니다.

댓글 없음: