IT/Android

[Kotlin] 메서드 인터페이스 객체 생성하기(Method Interface object)

토마토조아 2019. 9. 2. 10:39
728x90

안드로이드 개발을 코틀린을 진행하다 보면, 인터페이스 객체를 생성해야 사용해야 하는 경우가 종종 발생한다.

예를 들면,

View 클래스의 OnClickListener 같은 것을 만들어서 버튼에 붙여야 한다거나,

BottomNavationBar의 OnNavigationItemSelectedListener 를 만들어서 각 이벤트 처리를 하는 등등..

여러 가지 경우에 아주 흔하게 사용되는 것들이다.

바로 본론을 들어가면 코틀린에서 object를 이용해서 인터페이스 객체를 생성해야 한다.
바로 아래와 같이 코딩이 될 수 있다.

private val onNavigationItemSelectedListener = (object: BottomNavigationView.OnNavigationItemSelectedListener{
    override fun onNavigationItemSelected(p0: MenuItem): Boolean {
        // code
    }
})

코틀린에서는 기본적으로 람다를 제공하기 때문에 이를 람다식으로 변환하게 되면 아래와 같이 될 수 있다.

private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
    // code
}

아주 쉽고 간단하다. 대신 람다식처럼 간단하게 사용될 때에는 구현이 필요한 메서드가 1개인 경우에 한해서이다. 변수를 어러개가 될 수 있다.

만약 인터페이스 내부에 구현될 함수가 여러 개라면?
ViewPager의 OnPageChangeListener의 경우를 보면 3개의 내부 메서드를 구현해야 하고 아래와 같이 구현하여 람다식을 사용할 수 없다.

private val onPageChangeListener = (object : ViewPager.OnPageChangeListener{
    override fun onPageScrollStateChanged(p0: Int) {
        
    }

    override fun onPageScrolled(p0: Int, p1: Float, p2: Int) {
        
    }

    override fun onPageSelected(p0: Int) {
        
    }
})

 

728x90