Hero = {}
Hero.new = function(name, HP)
local instance = {}
local maxHP = 100
instance.name = name or "anonymous"
instance.HP = HP or maxHP
instance.setHP = function(self, hp)
self.HP = hp
end
instance.printMe = function(self)
print("Hero : " .. self.name , "HP=" .. self.HP)
end
return instance
end
hero1 = Hero.new(nil, nil)
hero2 = Hero.new("Mika", 80)
hero1:printMe()
hero2:printMe()
hero2:setHP(70)
hero1:printMe()
hero2:printMe()
hero1:setHP(90)
hero1:printMe()
hero2:printMe()
보충 : 사실 Hero = {} 하고 나서 Hero.new() 를 정의하는 것은 constructor 를 Hero.new 같은 형식으로 쓸 수 있게 하기 위한 것 뿐이다. 사실 Hero = {} 를 정의하지 않고 HeroNew() 라는 이름으로 function 정의를 해버려도 된다.
local instance = {} 로 안하고
instance = {} 로 해버리면
instance 가 global 이 되어 버려서 hero1 과 hero2 가 항상 똑같은 global object 를 가리키게 된다.
local 선언을 절대 잊어서는 안된다.
instance.setHP = function(self, hp) 는
function instance.setHP(self, hp) 또는
function instance:setHP(hp) 로 써줄 수 있다.
실전에서는 "보다 간결한 방식이 있을 때는 그 방식을 채택한다"는 원칙을 갖고 코딩하는 것이 좋을 것이다.
키워드 : OOP
No comments:
Post a Comment