AS3를 사용하면서 c#의 LINQ 같은 object query 기능이 있으면 좋겠다고 생각했는데, 생각해보니 AS3에도 E4X라는 좋은 기능이 있어서 object 를 xml로 serialize만 하면 E4X를 사용할 수 있는거였습니다. xml serialize야 Flex에 이미 있는 기능이지만, 약간 관점을 달리해서 마치 Object를 E4X로 사용할 수 있듯이 클래스로 만들어 용법을 정리해 보았습니다. 아래는 Array, Dictionary, Object 세 개의 collection 객체를 이용하여 특정 속성의 값을 찾는 코드를 기존방식과 E4O를 이용한 방식으로 분류해 보았습니다. (제가 쓰는 code syntax highlighter에 as3가 없어서 임시로 javascript용으로 컨버팅했습니다..ㅎㅎ) package     {       import ablib.core.E4O;       import flash.display.Sprite;       import flash.utils.Dictionary;       /**       * ...       * @author giman       */       [SWF (width="100", height="100")]       public class E4O_Example extends Sprite        {                      public function E4O_Example()            {               var result:String;                              var arList:Array = new Array();               arList[0] = { name1 : "name11", name2 : "name22" };               arList[1] = { name1 : "name33", name2 : "name44" };               arList[2] = { name1 : "name55", name2 : "name66" };                              var dicList:Dictionary = new Dictionary();               dicList["a"] = { name1 : "name11", name2 : "name22" };               dicList["b"] = { name1 : "name33", name2 : "name44" };               dicList["c"] = { name1 : "name55", name2 : "name66" };                              var objList:Object = new Object();               objList["a"] = { name1 : "name11", name2 : "name22" };               objList["b"] = { name1 : "name33", name2 : "name44" };               objList["c"] = { name1 : "name55", name2 : "name66" };                              //-------------------- 기존방식 검색방법               // Array 검색하기               for each (var arItem:* in arList)                {                   if (arItem.name2 == "name44")                   {                       result = arItem.name1;                       break;                   }               }               trace(result);  //print : name33                              // Dictionary 검색하기               for each (var dicItem:* in dicList)                {                   if (dicItem.name2 == "name44")                   {                       result = dicItem.name1;                       break;                   }               }               trace(result);  //print : name33                              // Object 검색하기               for each (var objItem:* in objList)                {                   if (objItem.name2 == "name44")                   {                       result = objItem.name1;                       break;                   }               }               trace(result);  //print : name33                                 //-------------------- E4O를 이용한 검색방법               // Array 검색하기               result = E4O.toXML(arList).item.(name2 == "name44").name1;               trace(result);  //print : name33                  // Dictionary 검색하기               result = E4O.toXML(dicList).*.(name2 == "name44").name1;               trace(result);  //print : name33                              // Object 검색하기               result = E4O.toXML(objList).*.(name2 == "name44").name1;               trace(result);  //print : name33           }                  }      }   코드가 많이 심플해지지 않았나요? ^^ 성능은 워낙 간단한 검색만 테스트해서인지 기존 검색방식과 0~1ms 정도 차이 밖에 나지 않았습니다. 아마도 검색원본 객체가 커지면 그만큼 serialize 시간이 늘어나므로  속도 및 메모리사용 효율은 떨어질 것으로 예상됩니다. 뭐 그래도 코드의 복잡도와 성능 중에서 복잡도 개선이 우선순위라면 충분히 쓸만해 보입니다. (전 그래요!!) 관련소스를 첨부했으며, 해당 소스는 Flash Develop에서 AS3 Project로 제작되었습니다. E4O.zip