액션 스크립트 내부에서 생성되는 객체들은 저마다 각기 고유 아이디를 가지고 있습니다. 디버깅할 때, 브레이크포인트를 걸어 보면, 객체가 표기되고, @아이디와 같은 모습을 볼 수 있는데, 액션 스크립트내에서는 저런 아이디를 알아내는 API가 없는데요. 그래서 사실 전 객체를 만들 때마다, toString()을 구현하고 있습니다. equals나, compare같은 기능을 위해서인데요. 이건 그것과는 약간 다른 느낌인 것 같습니다. 객체의 엄격한 비교격인 === 구문을 객체대 객체가 아닌, 문자열만으로 알 수 있으니까요. 이걸로 인해 파생되는 가치는 위에 적어 놓은 이전 포스트에서 hika님의 댓글을 참고해 주셔요~
사실 Dictanary객체의 구현은 Object의 고유 아이디를 지정해주고, 그 아이디를 이용해 Dictionary를 구현할 수 있습니다. 자바스크립트에는 Dictionary가 없어서 구현했었어요. ^^;;
객체의 고유 아이디를 알면, 무엇이 좋아질까.. 고민을 조금 해봤습니다.
일단 hika님의 의견대로, 객체와 약한 연결을 가지게 되어, 유연한 구조를 가져갈 수 있습니다.
그리고, 객체 추적이 가능해진다는 점인데요. 디버깅 및 프로파일링이 용이해 질 것 같고, 객체 비교를 좀 더 빠르게 할 수 있을 듯 합니다. 이 외에 파생될 수 있는 것들이 꽤 있을 것 같긴한데.. 잘 모르겠습니다 ㅠ_ㅠ); 있으면 댓글 좀..
현재 회사에서 내부적으로 사용되는 플래시 프로파일러를 만들어 본 적이 있습니다. 그래서 고유아이디도 얻을 수 있겠지 하고 Sampler를 이용해 테스트해봤습니다. 그랬더니 알고 있던 NewSample이나, DeleteSample의 아이디가 고유 아이디가 아니더라는.. API를 보면, 분명 객체의 고유아이디이다라고 되어 있거든요.. 고유 아이디는 맞긴 하겠지만. 우리가 아닌 고유 아이디는 아니었습니다..
막상 해보니.. 아니더라고요;;; 오잉??
그래서 별의 별 방법을 시도해보던 중.. 객체의 캐스팅을 잘못하면, Exception이 발생할 때, 고유 아이디를 에러에 찍어 주던 기억이 나서, 고의적인 객체 캐스팅 에러를 만들고 거기서 고유 아이디 값을 추출했습니다. 이게 정답은 아닐 것 같지만.. 동작은 잘 하니.. 편법으로는 사용할 만 할 것 같습니다. 그리고 Sampler를 이용한 것이 아니어서, 메소스화하기도 쉬워서 좋네요.. 더 좋은건 비공식이어도, 내부 메소드가 있는 것인데 있을 듯한데 참.. 알기 어렵네요..
mx패키지에 UIDUtil이라는 것이 있는데.. 거기서도 UID를 만들고 추출하니.. 공식 API상으로는 없다는 이야기겠죠?