본문으로 바로가기

Button 이벤트 처리의 원리

category Android 2018. 10. 11. 17:52

안드로이드에서 위젯의 이벤트처리를 본 적이 있을 것이다. 그런데 상당히 복잡한 구조를 띄고있다. 그 원리를 파헤쳐 보자.

통상 activity_main.xml에서 버튼 위젯을 디자인하고, MainActivity.java에서 버튼의 이벤트 처리를 작업한다.

많이 본적있는 코드가 있을 것이다.



Button loginbutton = (Button)findViewById(R.id.loginbutton);    //id값으로 버튼객체와 버튼 위젯을 연결시키기

loginbutton.setOnClickListener(new OncClickListener(){    //버튼의 이벤트처리 작성


@Override

public void onClick(...){

//function


}


});



여기서 매개변수로 들어간 부분은 익명 구현 객체이다.


 new OncClickListener(){   

@Override

public void onClick(...){

//function

}

}


OncClickListener interface를 구현하는 구현 클래스를 따로 작성하여 객체를 생성하는 것이아니라, 인터페이스를 구현함과 동시에 바로 클래스명 없이 객체를 생성하는 것이다. OncClickListener interface내의 추상 메소드 onClick()메소드를 재정의하여 구현한 후 바로 객체를 생성했다.


실제 이벤트 처리시 실행되는 메소드는 onClick()로 이렇게 실제로 기능을 수행하는 메소드를 핸들러(handler)라고 부른다.

그리고 핸들러를 가진 객체를 Listener라고 한다.


loginbutton객체의 setOnClickListenerd()의 매개변수로 핸들러(실제기능)를 포함하는 Listener를 등록함 으로서 버튼의 이벤트처리를 작성한 것이다.


이러한 코드작성 패턴을 디자인 패턴(Design Pattern)에서는 옵저버 패턴(Observer Pattern)이라고 한다.

옵저버 패턴에 관한 내용은 java design pattern 카테고리에 게시되어 있다.