'IViewCursor'에 해당되는 글 1건
2008.07.10 01:44
제가 Flex를 처음 접했을 때 이해가 안되던 부분은 Array와 ArrayCollection 에 대한 것이었습니다. Array를 이용해서 ArrayCollection을 만들긴 했었는데, 왜 그렇게 만들어야 하는지 조차 이해를 못했었죠. ;)

우선 Array 에 대해서 알아봐야겠습니다.
Flex 에 Array 는 자바의  Array와는 달리 동적이어서 크기를 지정하지 않고 임의대로 push, pop 메소드를 이용하여 아이템을 추가 및 삭제할 수 있습니다. 다만, 특정 인덱스 위치에 아이템을 추가한다 던가, 삭제한다던가 하는 것은 불가능 합니다. splice 메소드를 이용하여 특정 위치의 값에 대해 컨트롤 할 수 있습니다만, 상당히 번거롭습니다. 그리고 Array의 특정 아이템이 변경될 경우에 그 변경여부를 즉각 알 수가 없습니다. (var array:Array = new Array() 하는 것 보다 var array:Array = [] 이렇게 하시는 것을 추천합니다. 전자는 느립니다. 왜그런지는 자세히는 모르겠습니다. 에이레네님의 글을 보고 알았거든요 ㅎ)


이를 가능하도록 하여주는 것이 ArrayCollection 입니다.
다 시 말해서 ArrayCollection은 Array의 wrapper 클래스로 Array의 데이터를 핸들링해주는 역할을 합니다. 엄밀히 말해서는 ArrayCollection이 상속받은 ListCollectionView 클래스에서 지원해주죠. ArrayCollection은 단지 Array를 받을 source 라는 속성과 클래스 직렬화를 위한 readExternal, writeExternal 메소드(IExternalizable 인터페이스를 구현)만이 작성되어 있습니다.


그렇다면 ListCollectionView에 대해서 알아봐야겠습니다. 
ListCollectionView ICollectionView, IList, IMXMLObject 이렇게 3가지의 인터페이스를 구현하고 있습니다.(ListCollectionView 는 ArrayCollection과 XMLListCollection이 상속받고 있습니다. ArrayCollection은 Array에 대해서 컨트롤 하지만, XMLListCollection은 XML의 List 형태인 XMLList에 대해 컨트롤 합니다.) 여기서 중요하게 보아야 할 것은 처음 2개인 ICollectionView, IList 인터페이스입니다.

ICollectionView 인터페이스는 해당 Collection에서 데이터를 변경하지 않고, 데이터의 정렬 또는 필터링을 가능하게 해줍니다. 또한 해당 Collection에서 IViewCursor를 제공하여서 데이터에 대한 접근 및 변경을 지원합니다.


IList 인터페이스는 ICollectionView에서 IViewCursor를 이용한 순차적인 데이터접근과 달리 인덱스를 기반으로 하여 데이터에 대한 접근 및 변경을 지원합니다.


여기서 한가지 재미있는 것은 ListCollectionView는 내부적으로 IList 인터페이스를 이용하여 원본 데이터를 관리하고 있습니다. 위의 ArrayCollection에서 source에 Array를 반영해줄때 list 라는 변수에 넣어주는데 이 list 변수가 ListCollectionView에 보면
private var _list:IList;
와 같이 선언되어 있음을 알 수 있습니다.
ArrayCollecton 의 경우 Array, XMLListCollection의 경우 XMLList가 그 원본 데이터가 됩니다. 하지만 Array 와 XMLList 는 IList 인터페이스를 구현하고 있지 않습니다. 그렇기때문에 ArrayCollection에서는 IList를 구현하는 ArrayList, XMLListCollection에서는 XMLListAdapter 클 래스를 이용합니다. 이 2개의 클래스는 레퍼런스에서도 설명되어있지 않고, 빌더에서 Content Assist로도 나타나지 않습니다. 사용하기 원치 않았던 듯 합니다. ;) 하지만 ArrayCollection을 사용하기는 싫고 간편하게 데이터 접근이 필요한 경우에는 ArrayList를 사용해보는 것도 괜찮을 것 같습니다. (자바의 ArrayList 랑 똑같다고 생각이 듭니다.)


그럼 이상으로 간단하게 ArrayCollection에 대해 정리해보았습니다. 저도 이만 자야겠습니다. ;)
신고
이전 댓글 더보기
다롱이 | 2008.07.10 13:27 신고 | PERMALINK | EDIT/DEL | REPLY
역시.. 검쉰님이에요 최고♡
Favicon of http://warkyman.tistory.com BlogIcon 검쉰 | 2008.07.10 17:15 신고 | PERMALINK | EDIT/DEL
3번 정독! ㅋ
Favicon of http://genial12.tistory.com BlogIcon 일이아리 | 2008.07.10 16:02 신고 | PERMALINK | EDIT/DEL | REPLY
우올~~좋은자료!
Favicon of http://warkyman.tistory.com BlogIcon 검쉰 | 2008.07.10 17:15 신고 | PERMALINK | EDIT/DEL
방문 감사드려요~ ;)
고고당 | 2008.07.11 08:56 신고 | PERMALINK | EDIT/DEL | REPLY
카페보다가 링크타고 들어왔는데... 와 정말 좋은자료 많네요 감사합니다. 정독중 ^^
Favicon of http://warkyman.tistory.com BlogIcon 검쉰 | 2008.07.11 11:23 신고 | PERMALINK | EDIT/DEL
글 보시고 덧글 좀. ㅋㅋ
dilu | 2008.07.11 09:38 신고 | PERMALINK | EDIT/DEL | REPLY
ArrayList라는 게 있었군요 - 하지 말라는 건 더 하고 싶죠 ㅎㅎ
Favicon of http://warkyman.tistory.com BlogIcon 검쉰 | 2008.07.11 11:24 신고 | PERMALINK | EDIT/DEL
그러게요.. 써보니 편하긴 하더군요 ㅋ
Favicon of http://blog.empas.com/chaniks BlogIcon 찬익 | 2008.07.11 11:33 신고 | PERMALINK | EDIT/DEL | REPLY
ㅎㅎ 심도학습이네요
딱 한 가지만 정정을 하자면, Array의 경우에도
Array.splice를 이용하면 특정 인덱스의 값을 추가, 삭제할 수 있습니다.

ArrayCollection의 존재 이유는,
Array의 경우, EventDispatcher가 아니어서 그렇습니다.

EventDispatcher가 아니기 때문에 Array의 특정 인덱스의 값이 변경되었을 때,
propertyChanged 이벤트가 발생하지 않습니다. :')
(즉, 데이터 바인딩이 직관적으로 이루어지지 않습니다. 내부 값이 변경되어도, 별도의 핸들링을 해주지 않으면 View가 바뀌지 않지요.)

이러한 문제를 Object Proxy와 기타 간편한 인터페이스로 해결한 것이
ArrayCollection입니다. :')

보다 자세한 내용은, ListCollectionView의 내부 구현 중,
flash_proxy 네임스페이스로 묶인 부분을 보시면 자세히 알 수 있어요 ㅎㅎ
Favicon of http://warkyman.tistory.com BlogIcon 검쉰 | 2008.07.11 12:55 신고 | PERMALINK | EDIT/DEL
역시!! 멋지십니다. ;)
수정하도록 하겠습니다. ㅎㅎ
flash_proxy 관련해서는 제가 공부를 더 해서 다음글에 한번 올려볼께요 ;)
Favicon of http://blog.empas.com/chaniks BlogIcon 찬익 | 2008.07.11 15:11 신고 | PERMALINK | EDIT/DEL
AS 3.0에서 처음 소개된 flash.utils.Proxy..

재밌겠다 싶어서 AS 3.0 처음 나왔을때부터
단 한 번만이라도 써보려고, 벼르고 또 벼르고 있는데,
여태 한 번도 못 써봤어요 ㅎㅎ
Favicon of http://2rang.tistory.com BlogIcon 꽃녀 | 2008.07.24 22:29 신고 | PERMALINK | EDIT/DEL | REPLY
음 멋진 내용입니다.
검쉰님 블로그에는 효율적인 코딩에 관한 내용도 많이 있구요.
Array 와 ArrayCollection에 대해서도 잘 보았습니다.
좋은 블로그 친구(?)를 만나게 된 것 같아 기분이 좋습니다.
많이 배우고 갑니다.! :)
Favicon of http://warkyman.tistory.com BlogIcon 검쉰 | 2008.07.24 22:38 신고 | PERMALINK | EDIT/DEL
덧글 달아주셔서 감사합니다. :)
온라인뿐만이 아니라 오프라인에서의 만남도 좋아합니다. 언제 시간 되실때 한번 뵈었으면 좋겠네요.
Favicon of http://blog.naver.com/danxer BlogIcon 교학상장 | 2008.10.03 12:06 신고 | PERMALINK | EDIT/DEL | REPLY
궁금했던 부분을 잘 배우고 갑니다.
감사합니다 검쉰님 ^O^
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.10.03 21:03 신고 | PERMALINK | EDIT/DEL
트랙백 걸려있는 지돌스타님의 글도 읽어보시길 권합니다 ;)
박스농사 | 2008.10.30 17:11 신고 | PERMALINK | EDIT/DEL | REPLY
저도 사실 ICollectionView때문에 골탕먹은적이 있어서 일주일동안 안되는 번역실력가지고 사전뒤적거려가면서 본적이있는데
좋은글 감솨~
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.11.11 19:31 신고 | PERMALINK | EDIT/DEL
박스농사도 좋은 글 좀 생산좀...
쟈키 | 2008.11.11 16:43 신고 | PERMALINK | EDIT/DEL | REPLY
초보가 Array와 ArrayCollection에 대한 차잇점이 궁금해 서핑하였는데 한방에 이해되었어요 감사합니다 ^^
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.11.11 19:32 신고 | PERMALINK | EDIT/DEL
어익후~ 덧글도 남겨주시고 황공합니다. :)
춥고배고파 | 2008.12.19 11:00 신고 | PERMALINK | EDIT/DEL | REPLY
정말 잘 배우고 갑니다....정말 친절하게 잘 나왔네염
....어넝 배워서 고수 대야짐
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2008.12.23 00:14 신고 | PERMALINK | EDIT/DEL
좋은 정보 되셨다니 다행입니다. ;)
오이날다 | 2009.04.17 18:39 신고 | PERMALINK | EDIT/DEL | REPLY
정말 왠만하면 귀찮아서 글을 잘 올리지 않는데..ㅋㅋ

넘 감사합니다 좋은글
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2009.04.18 22:00 신고 | PERMALINK | EDIT/DEL
덧글 적어주셔서 감사합니다 ;)
신난밧드 | 2009.06.01 11:07 신고 | PERMALINK | EDIT/DEL | REPLY
감사합니다. 제가 항상 갈구하던 내용이었어요 ㅎㅎㅎㅎㅎㅎㅎㅎ
츄리닝 | 2009.07.17 16:58 신고 | PERMALINK | EDIT/DEL | REPLY
좋은 글 감사합니다...많은 도움이 됐네요..
근데, 질문이 하나 생겼는데요...
var myAL:ArrayList = new ArrayList(array); 에서 Array말고 Object가 들어가도 myAL.getItemIndex가 사용이 되나요??
예를 들어 new ArrayList(Object)에 들어가는 Object가 {label:하루, data:1},{label:이틀, data:2}....로 된 Object라면요...
myAL.getItemIndex(하루)라고 해도 검색이 되나요??
한다고 해봤는데 안되는것같아서요...
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2009.07.17 17:43 신고 | PERMALINK | EDIT/DEL
안됩니다.
getItemIndex()라는 메서드는 ArrayList에 구현된 메서드인데, Object 형태에서는 구현된 바 없으니 되지 않는 것이 당연합니다.

A를 상속받은 B가 있다 할때
var b:B = new A();
이 구문 차체가 문제가 됩니다.
Favicon of http://blog.flashplatform.kr BlogIcon 검쉰 | 2009.07.17 17:45 신고 | PERMALINK | EDIT/DEL
마치 연필 깎아 쓰는게 불편해서 샤프펜슬을 만들었다고 할때

var s:샤프펜슬 = new 연필();
s.눌러서_심_나오게_하기();
이런 식인데, s 변수가 보고 있는 실체는 연필이고, 연필은 아무리 머리를 눌러도 심은 안나오죠.
독학시작 | 2009.11.13 12:58 신고 | PERMALINK | EDIT/DEL | REPLY
혼자 시작해서 이것저것 모르는것 투성인데ㅋㅋ
맨날 눈팅으로 도움만 받다가 제 블로그로 퍼갔슴니다
도움 많이 받네요^^
이원주 | 2010.01.14 15:37 신고 | PERMALINK | EDIT/DEL | REPLY
워낙초보라 아직 이해가 잘 안가긴 하지만.. 일단 감사드려용~
퍼갈께요
핫산 | 2010.03.22 16:58 신고 | PERMALINK | EDIT/DEL | REPLY
좋은글 정리해주셔서 감사합니다. 도움이 많이 되네요^^
Favicon of http://imincheol.net BlogIcon 이민철 | 2010.04.09 09:46 신고 | PERMALINK | EDIT/DEL | REPLY
좋은글 고맙습니다.
그로밋 | 2011.01.25 20:51 신고 | PERMALINK | EDIT/DEL | REPLY
좋은 글 잘 보고 갑니다^^ 정말 많은 도움이 되었네요~ 내용 너무 좋습니다 짱짱!@!
이글스 | 2011.05.31 22:20 신고 | PERMALINK | EDIT/DEL | REPLY
정말 좋은 내용 감사드립니다^^
말로만 듣던 검쉰님의 홈페이지가 여기 있었군요!
김광연1 | 2014.02.12 13:55 | PERMALINK | EDIT/DEL | REPLY
관리자의 승인을 기다리고 있는 댓글입니다
- 덧글 좀..(굽신굽신) : 장문의 덧글은 트랙백을 이용해주세요 ;^)
Name
Password
Homepage
Secret
prev"" #1 next

티스토리 툴바