임의 객체에 메소드 붙이기
특정한 계산을 반복해서 하는 일이 생겼는데 따로 클래스를 만들기는 귀찮아서 어떻게 할까 고민하던 중 예전에 루비에서는 모든것들이 객체이므로 그 객체에서만 동작하는 메소드를 만들수 있다(혹은 그 비슷한 내용)는 내용을 본 기억이 스멀스멀 떠올랐습니다. 다음은 그 시험입니다. cities =[ [200.0,100.0], [180.9,158.8] ] # cities만의 내부 자료 table 생성 def cities.init @table = {} end # 거리 계산 def cities.distance(from, to) # @table = {} k = "%02x%02x", [from, to] if @table.has_key?(k) puts "using cache!" @table[k] else puts "calculating..." @table[k] = Math.sqrt((self[from][0] - self[to][0])**2 + (self[from][1] - self[to][1])**2) end end cities.init() puts cities.distance(0, 1) puts cities.distance(0, 1) 실행결과는... calculating... 61.82434795450738 using cache! 61.82434795450738 따로 클래스를 작성해도 되지 않느냐고 생각할 수도 있겠지만 기존에 동작하는 코드가 있다면 특별히 손을 많이 대지 않고도 클래스를 작성한 것과 같은 효과를 가져올 수 있을것 같습니다.