본문 바로가기

ETC Programmings

[Bindable] 의 비밀

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

책을 보고 예제를 작성해 나가면서 도대체 '[Bindable]' 이라는 건 무엇일까 고민이 고민이 들다가 결국은 폭발해서 블로그에 새 글을 쓰기 시작했다. 검색엔진을 통해서 만난 Bindable 이라는 키워드는 물론 ActionScript를 사용하는 유저들의 검색결과를 보여줬지만 나처럼 초보에게는 좀 어려운 내용들이 있어서 완전 쌩 초보인 나에게.. 내가 이해한 대로 작성을 해본다. 부디 나와 같은 초보분들에게도 도움이 되길...

Bindable의 비밀은 Bind 라는 사전적 의미에도 있다. '결속시키다, 묶다' 이런 의미로 해석하면 좋겠다. 아래의 소스를 살펴보면 더 이해가 갈 것이다.



	
	
			import mx.utils.ObjectUtil;
			import mx.collections.ArrayCollection;
			[Bindable]
			private var bindList:ArrayCollection;
			private var nonBindList:ArrayCollection;
			
			public function initLists():void{
				var arr:Array = new Array();
				for each(var obj:Object in list.member){
					arr.push(new String(obj));
				}
				nonBindList = new ArrayCollection(arr);
				bindList = new ArrayCollection(arr);
			}
			
			public function addItems():void{
				nonBindList.addItem("김고양이");
				bindList.addItem("김고양이");
				//nonBindableList.dataProvider = nonBindList;
			}
	
	
		
			
		
		
			
		
	
	
		
	


먼저 위에 Bindable 을 선언한 ArrayCollection 변수와 그렇지 않은 변수를 List Control 의 dataProvider 속성값에 정의를 해주었다. 좀더 쉽게 말해서 List Control 두개중에 하나는 결속시킨 ArrayCollection 변수, 다른 하나는 결속안시킨 ArrayCollection 변수를 할당했다. 그 결과는 보이는 그대로이다. 한쪽은 의도한대로 List 내용을 정확하게 구성하고 있었고, 다른 한쪽은 그냥 빈칸인 상태로를 유지하고 있다.

그럼 Bindable의 비밀은 무엇이겠는가? List와 같이 어떤 데이터 모델로부터 값을 가져와야 하는 것들은 수시로 그 데이터 모델의 상태가 변하기 마련이다. 그럼 해당 이벤트가 발생할 때 마다 Control의 데이터의 상태를 검사(여기선 dataProvider 의 내용 갱신)를 해주어야 한다. Bindable 이라는 키워드가 없다면 데이터 모델의 삭제, 수정, 삽입에 대해서 Control 들을 갱신시켜줘야하는 추가적인 코드 작성이 필요하게 된다. 하지만 Bindable을 통해서 해당 데이터 모델의 내용에 변화가 있을때 Control 의 상태도 또한 갱신해주도록 하니 아주 편리하게 된다.

좌측에 있는 List는 명단에 사람이 추가 될때마다 바로바로 그 내용이 변경이 되지만, 안타깝게도 우측 List는 그렇지 못하다. 그럼 좌우측의 List Control이 동일하게 바뀌려면 [Bindable] 없이 어떻게 해야할까? 상단 코드의 주석처리 된 부분을 해제하면 같은 결과를 볼수 있다. 단지 코드가 생긴 수준으로만 보면 별거 아닌거 같아도.. 저게 데이터의 삽입 하나에 그친거라면 수정, 삭제때도 마찬가지로 작성해줘야 하니 불필요하게 지저분해질테지요.. 그러니 Bindable 이라는 멋진 키워드를 알았다면 이런 실수는 하지 말아야 겠다.. (난 이미 했다... OTL)