안드로이드 앱 개발을 하다 보면 코드를 더 깔끔하게 만들고, 반복적인 작업을 줄이기 위해 다양한 방법을 고민하게 됩니다. 확장 함수는 자주 사용하는 기능을 기존 클래스에 쉽게 추가할 수 있도록 도와주는 강력한 도구입니다. 이 글에서는 안드로이드 개발자가 실무에서 자주 활용하는 확장 함수를 예시와 함께 소개하겠습니다.
1. 확장 함수(Extension Function)란?
코틀린 언어는 확장 함수라는 기능을 제공합니다. 이와 관련된 자세한 설명은 아래 링크에 잘 정리했습니다.
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))
확장 함수는 안드로이드 개발에서 자주 반복되는 코드를 줄이고, 가독성을 높이는 데 유용한 도구입니다. 위에서 소개한 예시 외에도 다양한 방식으로 확장 함수를 활용할 수 있습니다. 실무에서 자주 사용하는 기능을 확장 함수로 만들어 두면 코드 품질을 높이고 유지보수성을 향상시킬 수 있습니다. 확장 함수를 잘 활용하여 더 효율적인 안드로이드 개발을 하면 좋을 것 같습니다.
'안드로이드' 카테고리의 다른 글
안드로이드 ImageView 리플 효과 문제점 해결법 총 정리 - 이미지 아래에 리플효과가 깔리는 문제, 리플효과가 뷰 외곽까지 번지는 문제 (0) | 2025.01.13 |
---|---|
안드로이드 리플 (Ripple) 완벽 가이드 - 개념, 사용법, 커스텀, 예제코드,주의점 (0) | 2025.01.13 |
[안드로이드] 접근성 - TalkBack 구현 방법 총 정리(contentDescription 설정, announceForAccessibility함수 사용) (0) | 2025.01.08 |
[안드로이드] 꼭 알아야 할 크기 단위 총정리(dp, px, sp) - 개념, 예시, 차이점, 비교 (0) | 2024.12.30 |
[안드로이드] 예쁜 색상 HEX 코드 모음 - 컬러팔레트, 색상표, 컬러코드 (0) | 2024.12.23 |
댓글