안드로이드 인터페이스 기초 04 - 이벤트 (Event)

Dora·2020년 11월 6일
0

Chap7. 인터페이스 기초04- 이벤트 (Event)

Event-Driven Programming

: 프로그램의 실행 흐름이 사용자 동작과 센서 입출력 등 외부 이벤트에 따라 결정되는 프로그래밍 방식.

; GUI프로그램에서 채택하였으며 대부분의 프로그래밍 방식으로 쓰임.
; 이벤트가 발생하면 앱의 Event Handler가 이를 전달 받아 이벤트를 처리함. ex.onClick()

Android 이벤트 처리 방식

= Event Handler 구현 방식

방식1. 상속 메소드 재정의 (이벤트 처리 메소드 재정의)

  • Call-back 메소드 사용
    : View의 대표적 이벤트 처리 메소드이다.
boolean onTouchEvent (MotionEvernt event)
boolean onKeyDown (int keyCode, keyEvent event)
boolean onKeyUp (int keyCode, KeyEvent event)
boolean onTrackballEvent (MotionEvent event)

-- 개발자가 상속을 구현한 Custom View를 작성하였을 때만 사용 가능하다.
-- 이벤트에 대한 메소드가 전부 정의되어 있지 않다.
-- 앞에 on이 붙은 메소드는 대부분 콜백이다.
(Ctrl+O - Select Method to Override/Implement 에서 찾아볼 수 있다.)

  • View가 갖고 있는 기본 이벤트 처리 메소드를 상속받아 현재 사용하는 위젯 등에서 재정의

ex. (링크)

방식2. Listener Interface 구현 (가장 기본)

: 이벤트 처리 Listener를 구현하여 이벤트 처리가 필요한 View에 등록하는 방법으로 가장 기본적인 UI 이벤트 처리 방법이다.

  • 모든 UI 이벤트에 대한 Interface가 준비되어 있다.
    : 하나의 인터페이스 당 하나의 구현 메소드
//인터페이스 : 구현 메소드
onTouchListener : boolean onTouch (View v , MotionEvent event)
onKeyListener : boolean onKey (View v, int keyCode, KeyEvent event)
onClickListener : void onClick (View v)
onLongClickListener : boolean onLongClick (View v)

  • 인터페이스 적용 방법
  1. 처리하고자 하는 UI 이벤트에 해당하는 Interface 구현
  2. 인터페이스 구현 클래스 작성
  3. 구현한 클래스에서 객체 생성
  4. 생성한 객체를 이벤트 처리가 필요한 View에 등록

  • Listener Interface 구현 유형
    유형1. 별도의 리스너 인터페이스 구현 클래스 작성
    유형2. Activity가 리스너 인터페이스 직접 구현
    유형3. 뷰를 직접 작성할 경우 뷰에 리스너 인터페이스 구현
    유형4. 익명 내부 클래스로 구현
    ; 별도의 클래스 없이 인터페이스에서 직접 객체 생성
    유형5. 익명 내부 클래스의 임시 객체로 구현
    ; 객체 이름 없이 인터페이스 구현 및 등록

    ex. 리스너 인터페이스를 구현하여 이벤트 처리 (Listener Interface)

  • Listener Interface 사용 시 명칭
    : 명칭을 구성하는 규칙이 있어 이름을 통해 각 요소를 쉽게 유추 가능.

ex.
처리하려는 UI 이벤트 명 : Click
구현할 인터페이스 명칭 : OnClickListener (대문자로 시작)
인터페이스 내부 구현 메소드 명 : onClick (소문자로 시작)
뷰의 인터페이스 등록 메소드 명칭 : View.setOnClickListener

방식3. 위젯 이벤트 처리

: Click / Long Click과 같이 자주 사용하는 기본 이벤트 처리

; XML의 View 속성에 처리 메소드 명을 등록한 후 구현

ex.
1. Click 이벤트 처리가 필요한 위젯 선택
2. design창의 Properties에서 onClick란에 메소드명 입력
3. 해당 위젯이 속한 Activity에 멤버 메소드로 추가

ex. (링크)


이벤트 핸들러의 우선 순위

하나의 이벤트에 대하여 여러 이벤트 리스너를 작성할 경우의 우선 순위

경우1. 구현한 이벤트 리스너가 있을 경우 우선 수행

경우2. 뷰 자체의 콜백 메소드를 구현하였을 경우 우선 수행 (커스텀 뷰)

경우3. 액티비티에 콜백 메소드를 구현하였을 경우 우선 수행

+) 이벤트 리스너의 반환값 설정
true 반환 : 추가적인 이벤트 처리 진행을 생략
false 반환 : 이벤트 처리를 다음 순위의 리스너에게 이벤트 진행

외부 변수의 접근

문제점 : 이벤트 핸들러는 이벤트 발생 시점에 실행되어 외부의 지역 변수 사용 시 접근범위 문제가 발생할 수 있다.

해결책1 : 멤버 변수로 선언한다.

  • 내부에서의 접근 위치/시점의 제한이 없어짐.
  • 하지만 멤버변수가 너무 많아지지 않도록 주의해야함.

해결책2 : 상수로 선언한다.

  • 상수가 앱을 종료할 때까지 유지된다.
  • 멤버 변수로 선언할 필요가 없을 경우 적용할 수 있다.\

여러 가지 이벤트

  • 터치 입력
    : 버튼 클릭 이외에 뷰를 터치하는 이벤트 처리
    = ACTION_DOWN(화면터치), ACTION_MOVE(터치한 상태로 움직임), ACTION_UP(손가락을 뗌)
    ex. (링크)

  • 키보드 입력
    : 모바일 장비의 가상 키보드 입력 처리
    ; KEYCODE 값으로 입력할 키의 종류 구별
    = ACTION_DOWN, ACTION_UP, ACTION_MULTIPLE

  • 롱클릭 (롱탭)
    : 뷰를 일정 시간 동안 클릭하고 있을 때 발생하는 이벤트
    ; 클릭과 같이 쓰는 경우 false로 처리할 것

profile
Lv.1 개발자

0개의 댓글