0Pricing
Kotlin Academy · 강의

실전 확장: Context, View 및 String 도우미

자주 사용하는 패턴에 맞는 실제 Android 스타일 유틸리티 확장을 만들어 보세요.

실전 확장: Context, View 및 String 도우미은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

실전 확장

수정할 수 없는 프레임워크 타입에 확장을 사용하면 큰 효과를 얻을 수 있습니다. 예를 들어 Context, View, String, 컬렉션에 사용할 수 있습니다. 아래에는 실제 Android 코드베이스에서 바로 가져온 실용적인 패턴이 나와 있습니다.

Context.toast 도우미

장황한 Toast.makeText(...).show()를 한 줄짜리 확장으로 감싸십시오.

import android.content.Context
import android.widget.Toast
fun Context.toast(message: String, long: Boolean = false) {
    val duration = if (long) Toast.LENGTH_LONG else Toast.LENGTH_SHORT
    Toast.makeText(this, message, duration).show()
}
// Usage: context.toast("Saved!")

Context 리소스 도우미

리소스를 조회할 때 형 변환을 피하십시오. 확장을 사용하면 가독성과 타입 안전성이 향상됩니다.

import android.content.Context
import androidx.core.content.ContextCompat
fun Context.color(res: Int) = ContextCompat.getColor(this, res)
fun Context.string(res: Int) = getString(res)
fun Context.dp(value: Int) = (value * resources.displayMetrics.density).toInt()
// Usage: val red = context.color(R.color.error)

View.show / View.hide

번거로운 작업 없이 View.VISIBLE과 View.GONE을 전환하십시오.

import android.view.View
fun View.show() { visibility = View.VISIBLE }
fun View.hide() { visibility = View.GONE }
fun View.invisible() { visibility = View.INVISIBLE }
// Usage: progressBar.show(); button.hide()

View.setVisible(boolean)

조건에 따라 전환하는 한 줄짜리 코드로, if-else 가시성 코드를 대체합니다.

import android.view.View
fun View.setVisible(visible: Boolean) {
    visibility = if (visible) View.VISIBLE else View.GONE
}
// Usage: errorLabel.setVisible(state.hasError)

View.onClick 람다

익명 OnClickListener 대신 람다를 전달하여 클릭 리스너를 더 깔끔하게 작성할 수 있습니다.

import android.view.View
fun View.onClick(action: (View) -> Unit) {
    setOnClickListener(action)
}
// Usage:
// button.onClick { view -> println("clicked") }

String.isValidEmail

String에 도메인별 유효성 검사 확장을 추가하면 비즈니스 로직을 읽기 쉽게 만들 수 있습니다.

fun String.isValidEmail(): Boolean {
    val regex = Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")
    return regex.matches(this)
}
fun main() {
    println("ada@example.com".isValidEmail()) // true
    println("nope".isValidEmail())             // false
}

String.truncate

긴 문자열을 줄임표와 함께 잘라 내는 기능은 흔히 사용하는 UI 도우미입니다.

fun String.truncate(max: Int, ellipsis: String = "..."): String =
    if (length <= max) this else substring(0, max - ellipsis.length) + ellipsis
fun main() {
    println("The quick brown fox".truncate(10)) // The qui...
    println("short".truncate(10))                // short
}

String.toTitleCase

각 단어의 첫 글자를 대문자로 바꾸는 일반적인 서식 지정 도우미입니다.

fun String.toTitleCase(): String = split(" ").joinToString(" ") {
    if (it.isEmpty()) it
    else it[0].uppercaseChar() + it.substring(1).lowercase()
}
fun main() {
    println("hello WORLD from kotlin".toTitleCase())
}

목록 확장: chunkedBy

키를 기준으로 연속된 요소를 그룹화하는 기능으로, UI 섹션에 유용합니다.

fun <T, K> List<T>.chunkedBy(keySelector: (T) -> K): List<List<T>> {
    val result = mutableListOf<MutableList<T>>()
    var lastKey: K? = null
    for (item in this) {
        val key = keySelector(item)
        if (key == lastKey) result.last().add(item)
        else { result.add(mutableListOf(item)); lastKey = key }
    }
    return result
}
fun main() {
    val data = listOf(1, 1, 2, 2, 2, 3, 1)
    println(data.chunkedBy { it }) // [[1, 1], [2, 2, 2], [3], [1]]
}

Activity 도우미

구체화된 제네릭을 사용하여 탐색을 타입 안전하고 간결하게 만드십시오.

import android.content.Context
import android.content.Intent
inline fun <reified T> Context.startActivity() {
    startActivity(Intent(this, T::class.java))
}
// Usage: context.startActivity<MainActivity>()

과도하게 사용하지 마십시오

확장은 전역 네임스페이스에 추가됩니다. 확장의 목적을 분명히 하고 범위를 제한하며(private/internal), 도메인별로 그룹화하십시오(수신 타입마다 파일 하나를 사용하는 방식이 효과적입니다).

fun String.shout() = uppercase() + "!"
fun String.whisper() = lowercase() + "..."
fun main() {
    println("hello".shout())
    println("HELLO".whisper())
}

빠른 확인

Context나 View와 같은 Android 프레임워크 타입에 확장이 적합한 이유는 무엇입니까?

복습

확장은 프레임워크 타입(Context, 뷰, 문자열, 목록)에 사용하기 편리한 도우미를 추가하는 데 적합합니다. 일반적인 패턴으로는 가시성 전환, 클릭 리스너, 리소스 조회, 유효성 검사, 서식 지정이 있습니다. 확장의 목적을 분명히 하고 범위를 제한하며 수신 타입별로 그룹화하십시오.

자주 묻는 질문

“실전 확장: Context, View 및 String 도우미” 강의는 무료인가요?

네 — “실전 확장: Context, View 및 String 도우미” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“실전 확장: Context, View 및 String 도우미”에서 뭘 배우나요?

자주 사용하는 패턴에 맞는 실제 Android 스타일 유틸리티 확장을 만들어 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“실전 확장: Context, View 및 String 도우미” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 확장 함수: 문법과 디스패치 규칙
  2. 확장 프로퍼티와 계산 확장
  3. 스코프 확장과 컴패니언 확장
  4. 실전 확장: Context, View 및 String 도우미
← Kotlin Academy(으)로 돌아가기