안드로이드 앱 개발을 하다 보면 코드를 더 깔끔하게 만들고, 반복적인 작업을 줄이기 위해 다양한 방법을 고민하게 됩니다. 확장 함수는 자주 사용하는 기능을 기존 클래스에 쉽게 추가할 수 있도록 도와주는 강력한 도구입니다. 이 글에서는 안드로이드 개발자가 실무에서 자주 활용하는 확장 함수를 예시와 함께 소개하겠습니다.
1. 확장 함수(Extension Function)란?
코틀린 언어는 확장 함수라는 기능을 제공합니다. 이와 관련된 자세한 설명은 아래 링크에 잘 정리했습니다.
코틀린 확장 함수(Extension Function) 총 정리 - 개념, 사용방법, 확장 프로퍼티, 제네릭 확장함수, 장
1. 확장 함수란?코틀린에서 확장 함수(Extension Function)는 기존 클래스에 새로운 메서드를 추가하는 것처럼 사용할 수 있는 기능입니다. 기존 클래스를 수정하거나 상속하지 않고도 원하는 기능을
best-coding.tistory.com
2. View 확장 함수 예시
(1) View의 가시성 제어
안드로이드에서는 View의 가시성을 VISIBLE, INVISIBLE, GONE으로 설정하는 경우가 많습니다. 이를 확장 함수로 간단하게 처리할 수 있습니다.
fun View.show() {
visibility = View.VISIBLE
}
fun View.hide() {
visibility = View.INVISIBLE
}
fun View.gone() {
visibility = View.GONE
}
이 확장 함수를 사용하면 다음과 같이 코드가 더 직관적으로 바뀝니다.
button.show()
textView.gone()
(2) Snackbar 확장 함수
사용자에게 간단한 메시지를 보여줄 때 Snackbar를 자주 사용합니다. 이를 확장 함수로 정의하면 더 간편하게 사용할 수 있습니다.
fun View.showSnackbar(message: String, length: Int = Snackbar.LENGTH_SHORT) {
Snackbar.make(this, message, length).show()
}
다음과 같이 호출할 수 있습니다.
button.showSnackbar("저장되었습니다")
(3) Context 확장 함수 예시
1) Toast 메시지 출력
안드로이드에서 Toast 메시지를 출력할 때 매번 Toast.makeText를 호출하는 것이 번거로울 수 있습니다. 확장 함수를 활용하면 간단하게 처리할 수 있습니다.
fun Context.showToast(message: String, duration: Int = Toast.LENGTH_SHORT) {
Toast.makeText(this, message, duration).show()
}
context.showToast("로그인 성공")
2) AlertDialog 생성
fun Context.showAlertDialog(title: String, message: String) {
AlertDialog.Builder(this)
.setTitle(title)
.setMessage(message)
.setPositiveButton("OK") { dialog, _ -> dialog.dismiss() }
.show()
}
fun main() {
context.showAlertDialog("Title", "This is a message")
}
3) 입력 키보드 숨기기
fun Context.hideKeyboard(view: View) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
fun main() {
context.hideKeyboard(view)
}
4) 디바이스 화면 크기 가져오기
fun Context.getScreenSize(): Pair<Int, Int> {
val displayMetrics = resources.displayMetrics
return Pair(displayMetrics.widthPixels, displayMetrics.heightPixels)
}
fun main() {
val (width, height) = context.getScreenSize()
println("Width: $width, Height: $height")
}
4. String 확장 함수 예시
(1) 이메일 형식 검사
사용자의 입력이 이메일 형식인지 검사하는 기능은 자주 필요합니다. 이를 확장 함수로 작성할 수 있습니다.
fun String.isValidEmail(): Boolean {
return Patterns.EMAIL_ADDRESS.matcher(this).matches()
}
val email = "example@domain.com"
if (email.isValidEmail()) {
// 유효한 이메일
}
(2) 문자열 줄이기(ellipsize)
길이가 긴 문자열을 일정 길이로 줄이고 끝에 "..."을 붙이는 확장 함수입니다.
fun String.ellipsize(maxLength: Int): String {
return if (this.length > maxLength) this.substring(0, maxLength) + "..." else this
}
val longText = "안드로이드 확장 함수에 대한 자세한 설명을 제공합니다."
println(longText.ellipsize(10)) // 출력: 안드로이드...
5. RecyclerView 확장 함수 예시
RecyclerView는 안드로이드에서 리스트 형태의 UI를 만들 때 자주 사용됩니다. Adapter 설정을 더 간편하게 할 수 있도록 확장 함수를 정의할 수 있습니다.
fun RecyclerView.setup(adapter: RecyclerView.Adapter<*>, layoutManager: RecyclerView.LayoutManager) {
this.adapter = adapter
this.layoutManager = layoutManager
}
recyclerView.setup(myAdapter, LinearLayoutManager(context))
확장 함수는 안드로이드 개발에서 자주 반복되는 코드를 줄이고, 가독성을 높이는 데 유용한 도구입니다. 위에서 소개한 예시 외에도 다양한 방식으로 확장 함수를 활용할 수 있습니다. 실무에서 자주 사용하는 기능을 확장 함수로 만들어 두면 코드 품질을 높이고 유지보수성을 향상시킬 수 있습니다. 확장 함수를 잘 활용하여 더 효율적인 안드로이드 개발을 하면 좋을 것 같습니다.
댓글