안드로이드에서 이벤트 핸들러를 구현하는 다양한 방법(비공개)

이윤설·2024년 8월 26일
0

안드로이드에서 이벤트 핸들러를 구현하는 다양한 방법이 있습니다. 일반적으로 이벤트 처리 방법에는 4가지 접근 방식이 있으며, 이 글에서는 각각의 구현 방법을 다뤄보겠습니다.

1. 인터페이스로 구현한 object 클래스를 사용한 이벤트 처리

코틀린에서는 object 키워드를 사용하여 익명 객체를 생성하고 인터페이스를 구현할 수 있습니다. 이를 통해 이벤트 처리를 간결하게 작성할 수 있습니다.

button.setOnClickListener(object : View.OnClickListener {
    override fun onClick(v: View?) {
        Toast.makeText(this@MainActivity, "Button Clicked", Toast.LENGTH_SHORT).show()
    }
})

이 방법은 이벤트 처리를 하나의 객체로 묶어서 처리하기 때문에 재사용이 필요한 경우 유용합니다. 예를 들어, 동일한 이벤트를 여러 곳에서 사용해야 할 때 object를 사용하면 코드 중복을 줄일 수 있습니다.

2. 액티비티 자체에서 인터페이스를 구현하여 이벤트 처리

액티비티가 이벤트 처리 인터페이스를 구현할 수도 있습니다. 이 경우 Activity 클래스 자체가 리스너 역할을 하게 됩니다.

class MainActivity : AppCompatActivity(), View.OnClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        button.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.button -> {
                Toast.makeText(this, "Button Clicked", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

이 방법은 액티비티 전체에서 여러 뷰의 이벤트를 한 곳에서 관리할 때 유용합니다. 단, 액티비티가 많은 이벤트를 처리할 경우 코드가 길어질 수 있어 가독성이 떨어질 수 있습니다.

3. 별도의 클래스를 만들어 이벤트 처리

이벤트 핸들러를 별도의 클래스로 분리하면 코드의 가독성과 재사용성을 높일 수 있습니다. 특히 복잡한 로직을 처리하는 경우, 이벤트 핸들러를 외부 클래스로 분리하는 것이 좋습니다.

class ButtonClickHandler : View.OnClickListener {
    override fun onClick(v: View?) {
        Toast.makeText(v?.context, "Button Clicked", Toast.LENGTH_SHORT).show()
    }
}

// MainActivity에서 사용
button.setOnClickListener(ButtonClickHandler())

이 방법은 이벤트 핸들러를 모듈화하여 다른 액티비티나 프래그먼트에서도 쉽게 재사용할 수 있습니다. 다만, 간단한 이벤트의 경우에는 코드가 다소 복잡해질 수 있습니다.

4. 코틀린의 SAM 기법 (Single Abstract Method) 사용

코틀린은 함수형 프로그래밍을 지원하며, 인터페이스에 하나의 추상 메서드만 있는 경우 람다식을 이용한 간단한 코드 작성을 허용합니다. 이를 SAM 기법이라고 합니다.

button.setOnClickListener {
    Toast.makeText(this, "Button Clicked", Toast.LENGTH_SHORT).show()
}

이 방법은 가장 간단하고 직관적인 이벤트 처리 방식입니다. 코드가 매우 간결해지고, 특히 짧은 이벤트 핸들러에서는 가독성이 매우 좋습니다. 그러나 복잡한 로직이 필요한 경우에는 코드가 지나치게 압축되어 이해하기 어려울 수 있습니다.

정리

  • object로 구현한 클래스: 재사용 가능하며 코드 중복을 줄일 수 있습니다.
  • 액티비티 자체에서 인터페이스 구현: 여러 뷰의 이벤트를 한 곳에서 관리하기 좋지만, 코드가 길어질 수 있습니다.
  • 별도의 클래스: 복잡한 로직을 외부로 분리해 가독성과 재사용성을 높일 수 있습니다.
  • SAM 기법 (람다식): 코드가 간결하고 직관적이지만, 간단한 이벤트 처리에 적합합니다.

각 방법은 상황에 따라 장단점이 있으므로, 코드의 복잡성, 재사용성, 가독성 등을 고려해 적절한 방법을 선택하는 것이 좋습니다.

profile
화려한 외면이 아닌 단단한 내면

0개의 댓글