이번 포스팅은 Flex의 ClassFactory가 무엇이며, 활용방법에 대한 글입니다. Flex Reference를 내 맘대로 해석한 것입니다.

 

ClassFactory 객체는 Flex에서 다른 클래스의 동일한 속성의 객체를 만들기 위해 사용하는 "factory object" 입니다. factory oject를 생성할 때, generator 클래스를 정의합니다. 그리고 properties속성들을 factory 객체에서 정의합니다. Flex는 factory 객체의 newInstance()메소드를 호출함으로 객체생성을 합니다. newInstance() 메소드는 generator 클래스의 새로운 객체를 만듭니다. 그리고 properties를 사용해 새로운 객체의 속성들을 정의합니다.  생성된 객체를 좀 더 커스터마이징 하고싶으면 newInstance()메소드를 오버라이딩 하시면 됩니다.

 

ClassFactory는 IFactory 인터페이스에 의해 구현됩니다. 그러므로 IFactory 타입의 속성으로 할당되는 객체를 생성할 수 있습니다. 가령 List컨트롤의 itemRenderer속성이나, DataGrid컨트롤의 itemEditor속성들이 있습니다.

 

예를들어보면 true/false가 될 수 있는 showProductImage속성을 포함하는 ProductRender라는 itemRenderer클래스를 만들 수 있습니다. 이러한 renderer를 사용하는 List컨트롤의 코드는 다음과 같습니다.

 

  var productRenderer:ClassFactory = new ClassFactory(ProductRenderer);
  productRenderer.properties = { showProductImage: true };
  myList.itemRenderer = productRenderer;
 

List컨트롤은 ProductRenderer의 개별적인 객체를 만들기 위해 itemRenderer의 newInstance() 메소드를 호출합니다. showProductImage속성은 true로 정의되 있습니다. 만약 product 이미지를 생략위한 다른 List컨트롤을 만들고 싶다면, properties속성을 이용해 { showProductImage: false } 이렇게 정의함으로 또다른 ClassFactory를 생성하기 위한  ProductRenderer 클래스를 사용하면 됩니다.

 

 

객체설정을 위해 properties속성을 사용할 수 있다는 것은 매우 유용하나,  properties속성을 일일이 정의할 필요가 없이 non-configurable 생성자 클래스를 생성하는것이 일반적입니다.  다음과 같이 테그안에 정의합니다.

  <mx:List id="myList" itemRenderer="ProductRenderer">

MXML컴파일러는 자동적으로 ClassFactory객체를 생성합니다.

 

요지는 테그안에 itemRenderer를 호출하면 컴파일러가 자동으로 ClassFactory를 생성해 주므로 따로 작업할 것이 없지만, 스크립트상에서는 ClassFactory를 이용해야합니다.  왜냐하면itemRenderer는 IFactory타입이고, ClassFactory클래스는 오만 타입(?)을 IFactory 타입을 반환해주므로!

 

* source - Flex Reference

* 참고 - 타울님의 블로그(Actionscript에서 ItemRenderer 사용하기)

AND