2007년 11월 30일
SWAF Class의 Singleton 지원
SWAF이 자바스크립트로 개발된 단순한 라이브러리의 모음이 아니라 유기적인 프레임웍으로 되기 위해서는 singleton pattern에 대한 지원이 꼭 필요하다고 생각하였습니다.
그래서, 이미 개발해 놓은 SWAF의 클래스 지원 모듈에 Singleton 지원 기능을 추가하였습니다.
Singleton의 정의는 간단하게 다음과 같이 할 수 있습니다.
$namespace('lib.classes');
$class({
singleton1 : {
NAMESPACE : lib.classes,
SINGLETON : true,
data : 'singleton data'
}
});
위와 같이 클래스 정의에 단순히SINGLETON : true 로 하는 것 만으로 페이지 로딩시 이 클래스의 인스턴스가 생성되어 팩토리에 등록됩니다.
팩토리에 등록된 Singleton Instance는 아래와 같이 참조할 수 있습니다.
var myInstance1=$factory.get( lib.classes.singleton1 );
특히, 자바스크립트는 자바스크립트가 실행되는 페이지 뿐 아니라 프레임 구조로 연관된 도메인이 같은 다른 페이지에도 접근할 수 있는 특징이 있습니다. 그래서, SWAF에서는 Singleton Instance의 scope라는 개념을 도입했습니다.
만약, scope가 'page' 이면, singleton instance는 자바스크립트가 실행되는 현재 프레임에서만 참조됩니다. 만약, 다른 프레임에서 같은 이름의 인스턴스를 참조한다 하더라도, 실제로는 다른 인스턴스입니다.
그러나, scope가 'domain' 이면, factory에 등록된 singleton instance는 도메인이 같은 모든 프레임에서 공유됩니다. 이는, SWAF의 global storage 기능을 이용한 것으로 보안문제 없이 자바스크립트를 통해 접근할 수 있는 모든 페이지에서 같은 인스턴스를 참조할 수 있습니다.
Singleton instance의 scope와 같은 세부 옵션은 아래와 같이 지정합니다.
$class({
singleton2 : {
NAMESPACE : lib.classes,
SINGLETON : {
scope : 'domain',
lazyInit : true
}
}
});
단순히, SINGLETON : true 로 설정하면 디폴트로 scope는 'page'가 되며, lazyInit는 false 입니다.
여기서 lazyInit는 모든 Singleton Pattern을 지원하는 프레임웍이 그러하듯이 true일 경우 초기화시 인스턴스가 생성되어 팩토리에 등록되는 것이며, false인 경우 최초 참조시 생성되어 등록되는 것을 의미합니다.
한편, 정의시에 Singleton으로 지정하지 않은 클래스도 필요할 경우 수동으로 인스턴스를 생성하여 singleton으로써 팩토리에 등록시킬 수 있습니다.
$namespace('lib.classes');
$class({
singleton2 : {
NAMESPACE : lib.classes,
data : 'singleton data'
}
});
위와 같이 정의된 일반 클래스를 필요에 의해 singleton으로 등록시킬 경우 아래와 같이 합니다.
var myInstance2=$factory.regist( lib.classes.singleton2,{scope:'domain'} );
위 구문은 lib.classes.singleton2 클래스를 scope가 'domain'인 singleton instance로 factory에 등록하는 구문입니다. 이 때, 생성된 인스턴스는 반환됩니다. 그리고, 차후 아래의 구문을 이용하여 해당 singleton instance를 참조할 수 있습니다.
var myInstance3=$factory.get( lib.classes.singleton2 );
SWAF에서 Singleton을 지원함으로써 좀 더 프레임웍 다운 면모를 갖추게 되었다고 생각합니다. 물론, SWAF 초기버전에서 개발하였던 XML Context를 이용한 인스턴스 동적 구성도 추가할 예정입니다. XML Context는 Java의 Spring에서 그러하듯이 XML을 통해 클래스들의 구성 및 메시징 등을 동적으로 구성하는 기능입니다. 인터프리팅 언어인 자바스크립트에서 어느정도 효용성이 있는지는 좀 더 연구해 봐야 하겠지만, 실험적으로 만들었던 기능입니다.
기능을 정리하면서 떠오르는 아이디어들을 추가해보고 또 여러가지 기능들을 개선하고 있지만, 자칫하여 현업에서 사용할 수 없을 정도로 비대해지지 않을까 하는 것은 항상 경계해야 할 사항입니다.
# by | 2007/11/30 17:07 | SWAF | 트랙백 | 덧글(0)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]