스마트폰 화면에서 발생하는 이벤트는 델리게이션 이벤트 모델(Delegation Event Model)과 하이어라키 이벤트 모델(Hierarchy Event Model) 크게 두 가지이다.
델리게이션 이벤트 모델은 뷰에서 발생하는 이벤트를 처리하기 위한 모델이며, 하이어라키 이벤트 모델은 액티비티에서 발생하는 사용자의 터치나 키 이벤트를 직접 처리하기 위한 모델이다.

◼︎ 이벤트 프로그램 구조

델리게이션 이벤트 모델은 이벤트 소스와 이벤트 핸들러를 리스너(Listener)로 연결하여 처리하는 구조이다.

∙ 이벤트 소스: 이벤트가 발생한 뷰 객체
∙ 이벤트 핸들러: 이벤트 처리 내용을 가지는 객체
∙ 리스너: 이벤트 소스와 이벤트 핸들러를 연결하는 작업

객체지향프로그래밍에서 명료성은 중요한 목적중 하나이다.

만약 구성한 화면에 여러가지 뷰가 있다고 가정해 보자. 터치를 하여 이벤트가 발생하는데, 이때 여러 개의 뷰중 어떤 것을 터치하였는지, 터치한 뷰의 목적은 무엇인지 명료하게 알 수 없기 때문에 터치 이벤트로 처리하는 것이 아닌 이벤트가 발생하는 뷰를 직접 지칭하여 각 이벤트의 성격별로 이벤트 이름을 다르게 처리하여 명료성을 높이는 것이다.

이처럼 델리게이션 이벤트 모뎅은 이벤트가 발생한 객체를 명료하게 지칭하고자 이벤트 소스를 사용하고, 이벤트 성격을 명료하게 지칭하고자 리스너를 사용한다.

위의 그림처럼 vibrateCheckBox 객체에서 CheckedChangeEvent가 발생하면 어느 객체에서 이벤트가 처리된다는 것을 명료하게 연결하여 처리할 수 있다.

코드로 살펴보면

vibrateCheckView.setOnCheckedChangeListener(new MyEventHandler());

안드로이드 프로그램을 작성하면서 "setOnXXXListener()" 와 같은 구문을 많이 보게되는데, 이 부분이 이벤트 소스와 이벤트 핸들러를 리스너로 연결하는 부분이다.

코드를 해석하자면 vibrateCheckView 객체에서 CheckedChangeEvent가 발생하면 MyEventHandler라는 클래스 객체를 실행하여 이벤트를 처리하라는 의미이다.
이 때 이벤트 핸들러로 지정한 MyEventHandler는 개발자가 만든 클래스이며, 이벤트 핸들러 클래스는 꼭 지정된 인터페이스를 구현해야 한다.

class MyEventHandler implements CompoundButton.OnCheckedChangeListener{
	@Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    }
}

OnCheckedChangeListener 인터페이스를 구현하고, 추상 함수를 재정의(Override)하여 이벤트처리 로직을 작성해 놓으면 실제 이벤트가 발생할 때 해당 함수가 실행된다.

◼︎ 다양한 이벤트 처리

안드로이드에서 사용하는 주요 이벤트를 정리했다.

∙ OnClickListener: 뷰 클릭 시 발생하는 이벤트
∙ OnLongClickListener: 뷰를 오래 클릭했을 때 발생하는 이벤트
∙ OnCheckedChangeListener: CheckBox의 상태 변경 이벤트
∙ OnItemClickListener: ListView의 항목 선택 이벤트
∙ OnDateSetListener: DatePicker의 날짜 선택 이벤트
∙ OnTimeSetListener: TimePicker의 시간 선택 이벤트 

안드로이드 버전이 올라가면서 신규로 추가되는 뷰에 맞는 이벤트가 더 추가 될 수 있는데, 많고 많은 뷰와 이벤트가 있지만 델리게이트 이벤트 모델에 대한 이해가 있다면 이벤트를 처리하는 구조는 모두 같다.

이벤트 소스와 이벤트 핸들러를 setOnXXXListener() 함수로 연결하고, 이벤트 핸들러는 OnXXXListener를 구현하여 작성하면 되는 것이다.

OnClickListener는 모든 뷰에 적용할 수 있는 이벤트로 Button, TextView, ImageView 등 모든 뷰에 등록이 가능하며 OnLongClickListener 이벤트 역시 클릭 이벤트와 더불어 모든 뷰에 등록할 수 있다.

✏️ 오늘 총 세개의 벨로그를 올렸다~!
간단한 구조만 알고있었는데 오늘 글을 쓰면서 확실하게 정리가 된 것 같다.
내일하고 모래는 일하니까 아마 목요일에 다시 쓸 수 있을 듯하다.
그때를 위해 오늘은 여기까지....엽떡 먹엉지

profile
찌끄레기 코딩

0개의 댓글