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

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

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...