Monday, May 14, 2012

Lua에서 클래스 정의하는 법 (2) Table 방식

다음은 lua-users.org/wiki 의 Object Orientation Closure Approach 에 나오는 스타일을 따라 정의한 것. 대체로 이 방법이 쓰임
 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