Lua도 클래스 기반 객체지향 언어가 아니라 Self, Io, ECMAScript 언어들 처럼 프로토타입 기반 객체 지향 언어이다. Lua 언어에서 클래스 상속을 구현하기 위해서는 테이블과 함수가 필요하다.
아래의 소스 코드에서 inheritsFrom() 함수가 클래스 상속을 위해 구현돤 함수이다.
Lua 언어도 Java 언어 처럼 대소문자 구별을 엄격히 하므로 클래스를 선언하고 그 클래스로 객체 생성할 때 대소문자 구별을 꼭 지켜야 한다.
다음은 두 개의 클래스로 구성되어 있다.
Parent는 부모 클래스이고 Child는 Parent에서 상속 받은 자식 클래스이다.
-- Filename: testSubclassing.lua
--
-- A new inheritsFrom() function
--
function inheritsFrom( baseClass )
local new_class = {}
local class_mt = { __index = new_class }
function new_class:create(name)
local newinst = {}
self.name = name
setmetatable( newinst, class_mt )
return newinst
end
if nil ~= baseClass then
setmetatable( new_class, { __index = baseClass } )
end
-- Implementation of additional OO properties starts here --
-- Return the class object of the instance
function new_class:class()
return new_class
end
-- Return the super class object of the instance
function new_class:superClass()
return baseClass
end
function new_class:sayName()
print(self.name)
end
return new_class
end
Parent = inheritsFrom( nil ) -- pass nil because Parent has no super class
Child = inheritsFrom( Parent ) -- subclassing here
function Child:sayName() -- Override method
print("I am a chile, named as " .. self.name)
end
obj = Child:create("Dooly")
obj:sayName()
실행> lua testSubclassing.lua
I am a child, named as Dooly
LuaJava로 실행해도 된다.
실행> luajava testSubclassing.lua
I am a child, named as Dooly
'프로그래밍 > Lua' 카테고리의 다른 글
손으로 계산하는 긴자리 곱셈표 만들기 with Lua (0) | 2009.03.06 |
---|---|
손으로 만드는 나눗셈 계산표 with Lua (0) | 2008.05.16 |
삼각형 출력 예제를 통한 여러 가지 소스 비교 with Lua (0) | 2008.04.05 |
7비트 ASCII 코드표 만들기 예제 with Lua (0) | 2008.03.31 |
진법(radix) 표 만들기 예제 with Lua (0) | 2008.03.29 |