2011년 6월 2일 목요일

Singletons and Other Constructors

Singletons and Other Constructors

디자인 패턴에서 소개된 싱글톤 패턴을 루비에 적용해본다. 객체 생성 방법을 재정의하여 Logger.create 메서드가 Logger 객체를 생성하는 유일한 방법이 되도록 한다.

class Logger
 private_class_method :new
 @@logger = nil
 def Logger.create
@@logger = new unless @@logger
@@logger
 end
end

puts Logger.create.object_id
puts Logger.create.object_id

>> 22980860
>> 22980860

unless는 if의 부정형이다. 즉 뒤에 오는 조건이 거짓(false)일때 앞 Code가 실행된다. 여기서는 @@logger가 false(nil)이기 때문에 new가 실행되는 것이다.
생성된 @@logger의 object_id을 비교해보면 항상 같은 객체가 리턴되는 것을 알수 있다.
클래스 메서드를 추가하여 유사 생성자를 제공하는 것은 클래스 사용자에게 편의를 제공 할수 있다. 다각형을 표현하는 Shape 클래스를 예제로 살펴 보면

class Shape
 
 def Shape.triangle(sideLength)
Shape.new(3, sideLength*3)
 end
 def Shape.square(sideLength)
Shape.new(4, sideLength*4)
 end

 def initialize(numSides, perimeter)
# ...
 end
end

사용자가 원하는 도형의 형태와 한변의 길이만 알면 도형을 쉽게 만들어 낼수 있다.

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...