본문 바로가기

Documents/Startup

NAME, NAME_TYPE 속성을 이용한 인스턴스 찾기

Vulcan Project에 있는 proxy, mediator 클래스를 보면 NAME, NAME_TYPE이라는 static 상수가 정의되어 있습입니다. 간단히 말하자면 facade를 통해 이들 클래스 객체에 접근하는 방식은 너무 장황한 코드라인을 필요로 하기 때문에 보다 간편한 인스턴스 접근방식을 위해 도입한 속성입니다.

일반적인 접근방식

다음은 PureMVC에서 Proxy(또는 Mediator)인스턴스에 접근하는 일반적인 방법입니다. PureMVC에서 Sample로 제공되는 HistoryPanel의 코드를 살펴보겠습니다.

하지만 이 방법은 Mediator 클래스 이름을 키값으로 등록하여 사용하기 때문에 클래스당 단 하나의 인스턴스만 생성할 때에만 유효한 방법입니다. 따라서 하나의 Proxy(또는 Mediator)클래스가 여러개의 인스턴스를 가질때를 위해 이름에 고유번호를 부여하고 이를 바탕으로 NAME 상수의 값을 설정할 필요가 있습니다.


Multiple 인스턴스 객체에 접근

인스턴스에 접근할때 NAME 문자열을 구성하기 위해서는 필요한 UID를 일일이 알고 있어야 한다는 문제가 생깁니다. 이 문제를 완전히 해소할 수는 없지만 보다 편리한 방법으로 우회할 수는 있습니다.

APPLICATION, DOCUMENT, GRAPHIC 단위로 현재 선택상태(또는 활성화 상태)를 나타내는 각 UID를 기초로하여 인스턴스를 네이밍하고, 인스턴스가 사용되는 용도에 따라 UID관리(인스턴스 관리)를 나누어 관리 합니다. 이를 위해 NAME_TYPE 상수를 도입하였습니다.

이것은 가장 많이 참조되는 현재 Application의 현재 열려있는 Document의 현재 선택된 Graphic 아이템을 찾을때 매우 간단한 방법을 제공합니다.

캡슐화

이 과정은 NameUtils 클래스를 통해 간단히 캡슈화 되었고, 다시 SubSystem클래스(facade)에 의해 메서드로 제공됩니다. 클라이언트 측에서는 한줄만으로 인스턴스에 접근할 수 있게 되었습니다.

물론 현재 활성화 상태가 아닌 객체에 접근할 때에는 UID를 통해 접근해야 합니다.


NAME_TYPE의 결정

NAME 상수와 NAME_TYPE 상수는 클래스 내부에서 static 상수로 정의됩니다. 클래스를 만들때 NAME_TYPE을 설정해 주어야 합니다. NAME_TYPE의 값에는 NameUtils 클래스의 TYPE_APPLICATION, TYPE_DOCUMENT, TYPE_GRAPHIC 값을 설정할 수 있습니다.

어떤 값을 선택할지 결정하기 위해서는 먼저 클래스의 인스턴스가 어느레벨에서 사용되어 지는지를 판단해야 합니다. 예를 들면 Document를 관리하는 Proxy가 있다면 이 Proxy가 사용되는 (레벨)곳은 Application 차원에서 문서를 닫기, 열기 등 Application 차원의 작업에 관여할 것입니다(TYPE_APPLICATION).

각 문서내의 Graphic 아이템을 관리하는 Proxy가 있다면 이 객체는 주로 Document 내부의 데이터로써 관리될 것입니다(TYPE_DOCUMENT).

마찬가지로 Graphic에 관련된 특정 데이터만을 관리하는 - 예를 들면 Graphic 아이템에 따라 다르게 나타나는 컨텍스트 메뉴 데이터를 관리하는 Proxy 클래스가 있다면 이 클래스의 NAME_TYPE값은 TYPE_GRAPHIC값으로 설정되어야 할 것입니다.

가장 중요한 점은 현재 선택 또는 활성화 상태의 UID로 접근 가능한 형태로 클래스가 네이밍되어야 한다는 것입니다. 하지만 여전히 retrieveProxy, retrieveMediator 메서드를 이용하여 접근할 수도 있습니다.


'Documents > Startup' 카테고리의 다른 글

Vulcan Project 초기화 과정  (0) 2010.10.25
Vulcan Project 구조  (0) 2010.10.25
PureMVC Framework 수정사항  (4) 2010.10.16