CallBack 메서드에 대해 보고 오시면 더 좋습니다.
https://velog.io/@evergreen_tree/Android-Call-Back-%EB%A9%94%EC%84%9C%EB%93%9C%EB%9E%80
이벤트 리스너를 사용하거나 나 비동기 처리를 하는 경우 콜백 함수가 필요한 상황이 생긴다.
위 그림에서 보다시피, “버튼 클릭이 일어났을 때” 사용자가 지정한 동작이 일어나야 하기 때문이다.
이를 전체적으로 이해하기 위해, 이벤트 처리에 대한 코드를 직접 만들어 나가면서 설명하겠다.
Listener : 뷰 에서 발생하는 이벤트에 대해 작업을 처리해 주는 곳
OnClickListener → 클릭에 대한 작업을 처리해 주는 곳, MouseMotionListener → 마우스 동작에 대한 작업을 처리해 주는 곳을 말할 것이다.
Listener는 작업을 처리해 주는 곳이니까, 어떤 작업을 처리하는 지 명시해야 할 것이다.
또한, 어떤 개발자가 어떤 작업을 처리하려고 할 지 모르기 때문에, 인터페이스로 선언해야 할 것이다.
interface OnClickListener{ //뷰 에서 발생하는 클릭 이벤트의 작업을 처리해주는곳
fun onClick() //클릭에 대한 작업을 처리
}
class Button{
lateinit var mOnclickListener : OnClickListener
fun setOnClickListener(onClickListener: OnClickListener){
this.mOnclickListener = onClickListener
}
}
뷰에는 리스너의 구현체를 저장할 변수 mOnclickListener를 선언한다.
setOnclickListener 메서드를 작성하여, onClickListener 인터페이스의 구현체를 인수로 받아 저장한다.
여러 방법이 있지만, 가장 정석적인 방법 두가지로 이벤트를 등록하려고 한다.
class myClickListener : OnClickListener{
override fun onClick() {
println("버튼 누름")
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button = Button()
button.setOnClickListener(new myClickListener())
}
val button = Button()
button.setOnClickListener(object : OnClickListener {
override fun onClick() {
println("버튼 누름")
}
})
인터페이스의 구현체, 즉 인터페이스의 메서드들의 동작을 구현하여 전달함으로써, Button 클래스는 클릭 명령을 받았을 때 구현체의 onClick을 호출하면 된다.
버튼을 클릭한다고 가정하는 userClick()
class Button{
lateinit var mOnclickListener : OnClickListener
fun setOnClickListener(onClickListener: OnClickListener){
this.mOnclickListener = onClickListener
}
**fun userClick(){
mOnclickListener?.let{
it.onClick()
}**
}
}
소고기 스테이크 이벤트는 없을까요??