[루비 사용자 가이드] 싱글턴 메소드

루비/레일스 프로그래밍/루비 사용자 가이드 2007.05.13 07:22

한 인스턴스의 행동 방식은 그것의 클래스에 의해 결정됩니다. 하지만 때때로 특정한 인스턴스가 특별한 행동을 해야만 할 경우가 있을 수 있습니다. 대부분의 언어에서는 이를 위해 특별한 다른 클래스를 정의하고, 그 클래스를 단 한번만 인스턴스화해서 사용해야 합니다. 루비에서는 객체에게 그 객체 자신만의 메소드를 부여해 줄 수 있습니다.

ruby> class SingletonTest
    |   def size
    |     25
    |   end
    | end
   nil
ruby> test1 = SingletonTest.new
   #<SingletonTest:0xbc468>
ruby> test2 = SingletonTest.new
   #<SingletonTest:0xbae20>
ruby> def test2.size
    |    10
    | end
   nil
ruby> test1.size
   25
ruby> test2.size
   10

이 예에서 test1test2는 동일한 클래스에 속해 있습니다. 하지만 test2에는 size가 재정의되어 있기 때문에, test1test2의 동작이 다릅니다. 어떤 하나의 객체에만 주어진 메소드를 싱글턴(singleton) 메소드라고 합니다.

싱글턴 메소드는 서로 다른 버튼이 클릭되면 다른 행동이 발생해야 하는 그래픽 사용자 인터페이스(GUI)에서 자주 사용되곤 합니다.

싱글턴 메소드가 루비에만 있는 것은 아닙니다. CLOS, Dylan 등의 언어도 그런 능력을 제공합니다. 또한 Self나 NewtonScript 같은 몇몇 언어는 싱글턴 메소드만 제공하기도 합니다. 이런 언어들은 때때로 프로토타입 기반(prototype-based) 언어라 불립니다.

Trackbacks 0 : Comments 0