안드로이드 델리게이션 이벤트 모델(Delegation Event Model)

안드로이드 스마트폰 화면에서 발생하는 사용자 이벤트는 크게 두 가지 모델로 나눌 수 있다. 하나는 델리게이션 이벤트 모델(Delegation Event Model) 그리고 하이어라키 이벤트 모델(Hierachy Event Model)이다. 이번에는 델리게이션 이벤트 모델에 대해 알아보도록 하겠다.

델리게이션 이벤트 모델(Delegation Event Model)

간단히 말해서 안드로이드 액티비티 내부에 존재하는 다양한 뷰(View)에서 발생하는 이벤트를 처리하는 모델이다. 델리게이션 이벤트 모델의 기본구조는 이벤트 소스(이벤트가 발생한 뷰 객체)와 이벤트 핸들러(이벤트 처리 내용을 가지는 객체)를 리스너로 연결하여 처리하는 구조이다.

델리게이션 이벤트 모델 도식화

사실 액티비티에서 발생하는 터치 이벤트 등은 액티비티의 이벤트를 관리하는 하이어라키 이벤트 모델로 처리 할 수도 있다. 하지만, 특정 버튼의 터치 여부를 확인 하기 위해 좌표정보를 이용하는 방법은 나 같이 게으르고 아둔한 개발자에겐 버거운 일일 것이다.

다음 간단하게 델리게이션 이벤트 모델의 구조를 소스코드로 확인해보자. 아래는 btn이라는 뷰객체의 클릭이벤트를 처리하는 간단한 소스이다.

btn이라는 이름의 뷰객체에서 클릭 이벤트가 발생하면 setOnClickListener 함수의 인자의 익명객체의 onClick함수가 동작하게 된다.

1
2
3
4
5
6
btn.setOnClickListener(new View.OnclickListener(){
@Override
public void onClick(View v){
//...클릭 이벤트에 필요한 코드 자리
}
});

위 소스를 좀 풀어서 설명하자면, btn은 클릭 이벤트가 발생하는 뷰 객체이다. btn.setOnClickListener 메소드는 btn에 클릭이벤트가 발생할 때 발생된 이벤트 객체를 핸들러에게 전달하는 전달자이다.

1
2
3
4
5
6
new View.OnclickListener(){
@Override
public void onClick(View v){
//...클릭 이벤트에 필요한 코드 자리
}
}

리스너의 인자로 전달되는 View.OnclickListener 인터페이스를 구현한 익명 클래스는 리스너가 뷰객체로 부터 받은 이벤트 객체를 처리할 핸들러이다.

뷰는 다양한 종류가 있고 그리고 뷰에 따라 발생하는 이벤트의 차이가 있다. 따라서 해당 이벤트를 처리하는 핸들러도 특정 이벤트를 처리하기 위해 최소한의 구조가 필요하고, 안드로이드에서는 그 구조들을 뷰 클래스들의 인터페이스로 제공 하고 있다. 따라서 핸들러 클래스는 꼭 지정된 인터페이스를 구현해야 한다.

안드로이드 뷰에서 제공되는 주요 이벤트들

Event 종류 설명
OnClickListener 뷰 클릭 시 발생 이벤트
OnLongClickListener 뷰를 오래 클릭시 발생 이벤트
OnCheckedChangeListener CheckBox의 상태 변경시 발생 이벤트
OnItemClickListener ListView의 항목 선택시 이벤트
OnDateSetListener DatePicker의 날짜 선택시 이벤트
OnTimeSetListener TimePicker의 시간 선택시 발생 이벤트

앞서 예제에서 사용한 클릭이벤트 뿐만 아니라 다양한 뷰에 따른 이벤트들이 존재 한다. 델리게이션 이벤트 모델을 기초로 상황에 맞게 필요한 이벤트 인터페이스를 구현한 핸들러를 사용하면 된다.

지금까지 안드로이드 뷰의 이벤트처리모델인 델리게이션 이벤트 모델에 대해 정리해 봤다. 자바를 책을 볼때 이 익명 클래스를 어디에서 사용하지 고개를 갸웃했었는데, 안드로이드를 보니 좀 감이 오는 것 같다. 아닌 것도 같고...

다음에는 하이어라키 이벤트 모델에 대해 정리해 봐야겠다.

Related Posts

하이어라키 이벤트 모델(Hierachy Event Model)