루아에는 C언어와 같은 클래스 개념이 없습니다. 하지만, 테이블을 이용하여 비슷한 역할과 기능으로 동작시키는건 가능합니다. 이미 테이블에 관해서 익혀왔다면 어느정도 짐작은 하셨겠지요.
다음의 두 예제를 보면서 구조를 살펴보도록 하겠습니다. 먼저 첫번째 예제는 C언어로 만들어본 클래스이고, 두번째 예제는 루아로 다시 구현해본 예제입니다.
- C언어
class MyClass
{
private:
string m_strName;
int m_nAge;
public:
void SetName( string& strName);
string& GetName();
void SetAge( int nAge);
int GetAge();
};
void MyClass::SetName( string& strName)
{
m_strName = strName;
}
string& MyClass::GetName()
{
return m_strName;
}
void MyClass::SetAge( int nAge)
{
m_nAge = nAge;
}
int MyClass::GetAge()
{
return m_nAge;
}
- 루아
MyClass = {};
MyClass.m_strName = "";
MyClass.m_nAge = 0;
function MyClass:SetName( strName)
MyClass.m_strName = strName;
end
function MyClass:GetName()
return MyClass.m_strName;
end
function MyClass:SetAge( nAge)
MyClass.m_nAge = nAge;
end
function MyClass:GetAge()
return MyClass.m_nAge;
end
위처럼 테이블로써 메소드와 변수를 묶으면 객체를 생성하고 관리하기 편하며, 생성한 테이블에 단순히 nil을 입력해주는 것만으로 그 객체를 삭제할 수 있다는 점에서 매우 중요합니다.