본문 바로가기

Silverlight

Behvior , Trigger, Action의 개념


이번강좌는 Silverlight 3 에서 가장 혁신적이라 말할 수 있는 Behavior 에 대한 강좌입니다.

왜 가장 혁신 적인가?

Behavior의 사전적 의미는 다음과 같습니다.
behavior│-iour 단어장 추가

1 행동, 거동, 행실, 품행, 태도(⇒ conduct [유의어])
2【심리】 행동;습성
3 [종종 pl.] 행동 양식(behavior pattern)
4 (기계 등의) 가동, 움직임;작용, 반응


네이버 사전에서 발최 했구요,
위와 같이 행동,  거동, 행실, 품행 등등 의 개념입니다.

이제 이와 같은것을 컨트롤에 부여 할 수 있다는 것입니다.
여러 연극배우가 있고, 그중에 역활을 분배하는것과 비슷하고,
역활을 부여한다, 로직을 부여한다, 등 의 개념입니다.

기존 프로그래밍에서는 디자인과 로직이 합쳐진 경우가 많았습니다.
아주 단적인 예를 들자면, 버튼을 누르면 뭐 하게 하라, 같이말이죠.

하지만 이제 Silverlight 3 에서는 'X를 A할때 B 하게 하라'를 아키텍쳐상에서 분리시켜 놓았습니다.
그래서 X와 A와 B가 독립적이라서,X,A,B를 한번 만들어 놓으면 재사용도 간편하고 직관적으로 이해 할 수 있습니다.
이때 보통 X는 컨트롤이 될것이구요, A는 Trigger 그리고 B는 Action이라고 할 수 있는데,
Trigger와 Action은 Behavior 에서 아주 중요한 개념입니다.

Trigger는 방아쇠 라는 뜻인데요, 격발자, Fire 하게 하는,  뭔가 실행하게하는,
그 뭔가를 일으키는 것이지요. 어떤 조건 으로 이해하시면 됩니다.

Action은 행위 를 뜻하므로, 정말로 구체적인 행위를 뜻하지요.

Behavior의 구조는 다음과 같습니다.

Behavior는 크게 3종류로 나눌수 있습니다.
(블랜드를 기준으로 해서 나누면 아래 클래스에서 파생된 클래스를 사용하게됩니다.
여기서 Behavior로 3개를 다 묶은것은 Behaviors Asset에 있기 때문입니다)
Behavior ,TriggerAction,TargetedTriggerAction

TriggerAction과 TargetedTriggerAction은
자동사와 타동사의 성질과 비슷합니다.
예를 들어서
이런이런 때  , 누구는 뭐뭐 한다.
라면 이런이런 때 는 Trigger를 뜻하고 누구는 Behavior가 붙는 객체, 뭐뭐 는 Action인 것은 아실꺼에요.
이것은 자동사인데, 목적어가 없는거에요. 즉 주어인 '누구' 에게 만 영향을 미치지요.
하지만
이런이런 때, 누구는 A에게 뭐뭐한다.
라면 A가 목적어가 되는거에요. 바로 Target을 말하는것이지요.

그렇다면 Behavior는 어떤것인가??

참 애매한게요, Behavior는 TriggerAction, TargetedTriggerAction 을 다 아우른다고 봐도 되요.
Behavior는 기본적으로 Trigger를 사용하지는 않지만, ICommand 프로퍼티가 노출되면
각 각의 ICommand 프로퍼티에 대해 에 Trigger를 붙여서 사용할 수 있어요.
Target을 Behavior가 노출시킨 하나의 프로퍼티로 줘버리면 TargetedTriggerAction이되기도 하고
그냥 인자면 있으면 TriggerAction이 되기도하고
Trigger가 없으면 그냥 항시되는 Action이 되기도 해요.

일단 기본적으로 Trigger를 필요하지 않는 항상성을 가진 어떤 습성을 Behavior라 봐도 될것 같아요.

중요한건 Action, Behavior,Trigger의 개념을 이해하는 거에요.

위에서 말한
System.Windows.Interactivity.Interaction 에 있구요
Behavior자체가 Behaviors  AttachedProperty로
을 받아와서 등록이 가능하구요(System.Windows.Interactivity.Interaction.GetBehaviors로 BehaviorsCollection임)
TriggerAction이나 TarggetedTriggerAction은
TriggerBase의 Actions 의 TriggerActionCollection에 소속되는데
이 Trigger도 Triggers AttachedProperty로
TriggersCollection을 받아와서 등록이 가능해요.
물론 컨트롤 뿐만아니라 DependencyObject를 상속받은 모든 것이 가능하지요.


잘 이해하셨는지 모르겠네요.

막상 해보면 간단한 내용이니 예제를 중심으로
 몇몇 애니메이션 효과들 Behavior를 만들면서 강좌를 진행해 나가도록 하겠습니다. :)

[출처] 실버라이트 네이버 카페