Languages/Kotlin

Kotlin μ΄λž€

μ§€λ‹ˆπŸ§ž‍♂️πŸ₯­ 2023. 3. 3. 06:03

Kotlin은 κ°„κ²°ν•˜κ³  μ•ˆμ „ν•˜λ©° μœ μ§€ 관리 κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό 더 μ‰½κ²Œ μž‘μ„±ν•  수 μžˆλ„λ‘ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” μ΅œμ‹  μ˜€ν”ˆ μ†ŒμŠ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μž…λ‹ˆλ‹€. λ‹€μŒμ€ Kotlin의 κ°€μž₯ μœ μš©ν•œ κΈ°λŠ₯ 쀑 μΌλΆ€μž…λ‹ˆλ‹€.

  1. Null μ•ˆμ „μ„±: Kotlinμ—λŠ” 컴파일 νƒ€μž„μ— null 포인터 μ˜ˆμ™Έλ₯Ό λ°©μ§€ν•˜λŠ” κ°•λ ₯ν•œ μœ ν˜• μ‹œμŠ€ν…œμ΄ μžˆμŠ΅λ‹ˆλ‹€. λŸ°νƒ€μž„ 였λ₯˜ 없이 null 값을 μ‰½κ²Œ μ²˜λ¦¬ν•  수 μžˆλŠ” nullable ν˜•μ‹ μ‹œμŠ€ν…œμ„ μ œκ³΅ν•©λ‹ˆλ‹€. 이 κΈ°λŠ₯은 μ½”λ“œμ˜ μ•ˆμ „μ„±κ³Ό 신뒰성을 κ°œμ„ ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.
  2. ν™•μž₯ ν•¨μˆ˜: Kotlin의 ν™•μž₯ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžκ°€ μ†ŒμŠ€ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ λ„ κΈ°μ‘΄ ν΄λž˜μŠ€μ— μƒˆ ν•¨μˆ˜λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ 더 κ°„κ²°ν•˜κ³  읽기 μ‰¬μš΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있으며 μ½”λ“œ 쀑볡을 μ€„μ΄λŠ” 데 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. 데이터 클래슀: Kotlin의 데이터 ν΄λž˜μŠ€λŠ” 클래슀λ₯Ό μ •μ˜ν•˜λŠ” κ°„κ²°ν•œ 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. 데이터. 데이터 ν΄λž˜μŠ€λŠ” ν•΄λ‹Ή 속성을 기반으둜 equals(), hashCode() 및 toString()κ³Ό 같은 μœ μš©ν•œ λ©”μ„œλ“œλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μƒμš©κ΅¬ μ½”λ“œλ₯Ό 쀄이고 μ½”λ“œλ₯Ό 더 κ°„κ²°ν•˜κ³  읽기 μ‰½κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
  4. 코루틴: Kotlin은 비동기 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” κ²½λŸ‰ μŠ€λ ˆλ“œμΈ 코루틴을 기본적으둜 μ§€μ›ν•©λ‹ˆλ‹€. . 코루틴은 읽고 μœ μ§€ν•˜κΈ° μ‰¬μš΄ 비동기 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 비차단 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” κ°„λ‹¨ν•˜κ³  효율적인 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.
  5. Javaμ™€μ˜ μƒν˜Έ μš΄μš©μ„±: Kotlin은 Java와 μƒν˜Έ 운용 κ°€λŠ₯ν•©λ‹ˆλ‹€. 즉, Kotlin μ½”λ“œλŠ” Java 라이브러리 및 ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έ λ°˜λŒ€. 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ κΈ°μ‘΄ Java ν”„λ‘œμ νŠΈλ₯Ό Kotlin으둜 μ‰½κ²Œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  6. 슀마트 캐슀트: Kotlinμ—λŠ” 슀마트 μΊμŠ€νŠΈλΌλŠ” κΈ°λŠ₯이 μžˆμ–΄ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ λ³€μˆ˜λ₯Ό 보닀 ꡬ체적인 λ³€μˆ˜λ‘œ μΊμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€. μœ ν˜• 검사λ₯Ό 기반으둜 ν•œ μœ ν˜•. 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ κ°„κ²°ν•˜κ³  μ•ˆμ „ν•œ μ½”λ“œλ₯Ό 더 μ‰½κ²Œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  7. Lambda ν‘œν˜„μ‹: Kotlin은 읡λͺ… ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” κ°„κ²°ν•œ 방법인 λžŒλ‹€ ν‘œν˜„μ‹μ„ μ§€μ›ν•©λ‹ˆλ‹€. 이 κΈ°λŠ₯은 μƒμš©κ΅¬ μ½”λ“œλ₯Ό 쀄이고 μ½”λ“œλ₯Ό 더 κ°„κ²°ν•˜κ³  읽기 μ‰½κ²Œ λ§Œλ“œλŠ” 데 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ „λ°˜μ μœΌλ‘œ Kotlin은 Kotlin을 κ°•λ ₯ν•˜κ³  λ‹€μž¬λ‹€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” λ‹€μ–‘ν•œ μœ μš©ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. κ΄‘λ²”μœ„ν•œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•œ μ–Έμ–΄μž…λ‹ˆλ‹€. null μ•ˆμ „μ„±, ν™•μž₯ κΈ°λŠ₯, 데이터 클래슀, 코루틴 및 Javaμ™€μ˜ μƒν˜Έ μš΄μš©μ„±μ€ μ½”λ“œμ˜ μ•ˆμ „μ„±, μ„±λŠ₯ 및 μœ μ§€ 관리 κ°€λŠ₯성을 κ°œμ„ ν•˜λ €λŠ” κ°œλ°œμžμ—κ²Œ λ§€λ ₯적인 μ„ νƒμž…λ‹ˆλ‹€.

 

λ‹€μŒμ€ Kotlin λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅ν•˜λŠ” λͺ‡ κ°€μ§€ μœ μš©ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.

  1. λ΄‰μΈλœ 클래슀: Kotlin은 κ°œλ°œμžκ°€ λ‹«νžŒ 클래슀 계측 ꡬ쑰λ₯Ό μ •μ˜ν•  수 μžˆλŠ” λ΄‰μΈλœ ν΄λž˜μŠ€λΌλŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. λ΄‰μΈλœ ν΄λž˜μŠ€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°œμƒν•  수 μžˆλŠ” λ‹€μ–‘ν•œ μœ ν˜•μ˜ 였λ₯˜μ™€ 같은 μ œν•œλœ 클래슀 계측 ꡬ쑰λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.
  2. ν™•μž₯ κΈ°λŠ₯: Kotlin의 ν™•μž₯ κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžκ°€ μƒˆ κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ†ŒμŠ€ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  κΈ°μ‘΄ ν΄λž˜μŠ€μ— 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ 더 κ°„κ²°ν•˜κ³  읽기 μ‰¬μš΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있으며 μ½”λ“œ 쀑볡을 μ€„μ΄λŠ” 데 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. ν‘œμ€€ κΈ°λŠ₯: Kotlin은 λ‹€μŒμ„ μˆ˜ν–‰ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ ν‘œμ€€ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. 필터링, λ§€ν•‘ 및 μ»¬λ ‰μ…˜ 접기와 같은 일반적인 μž‘μ—…. μ΄λŸ¬ν•œ ν•¨μˆ˜λŠ” μƒμš©κ΅¬ μ½”λ“œλ₯Ό 쀄이고 μ½”λ“œλ₯Ό 더 κ°„κ²°ν•˜κ³  읽기 μ‰½κ²Œ λ§Œλ“œλŠ” 데 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.
  4. 코루틴: Kotlin은 비동기식을 μˆ˜ν–‰ν•  수 μžˆλŠ” κ²½λŸ‰ μŠ€λ ˆλ“œμΈ 코루틴을 기본적으둜 μ§€μ›ν•©λ‹ˆλ‹€. 운영. 코루틴은 읽고 μœ μ§€ν•˜κΈ° μ‰¬μš΄ 비동기 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 비차단 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” κ°„λ‹¨ν•˜κ³  효율적인 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.
  5. λ²”μœ„: Kotlin은 두 끝점 μ‚¬μ΄μ˜ κ°’ μ‹œν€€μŠ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” λ²”μœ„ 클래슀λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. λ²”μœ„λŠ” μš”μΌ λ˜λŠ” κ·Έλ¦¬λ“œμ˜ μˆ«μžμ™€ 같은 일련의 값을 λ°˜λ³΅ν•˜λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.
  6. μ»¬λ ‰μ…˜: Kotlin은 λ‹€μŒμ„ ν¬ν•¨ν•œ λ‹€μ–‘ν•œ μ»¬λ ‰μ…˜ 클래슀λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. λͺ©λ‘, μ§‘ν•© 및 지도. μ΄λŸ¬ν•œ ν΄λž˜μŠ€λŠ” 필터링, λ§€ν•‘ 및 μ •λ ¬κ³Ό 같은 μ»¬λ ‰μ…˜ μ‘°μž‘μ„ μœ„ν•œ λ‹€μ–‘ν•œ μž‘μ—… μ„ΈνŠΈλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  7. λ¬Έμžμ—΄ μ‘°μž‘: Kotlin은 λ‹€μŒκ³Ό 같은 λ¬Έμžμ—΄ μ‘°μž‘μ„ μœ„ν•œ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. λΆ„ν• , 닀듬기 및 μ„œμ‹ μ§€μ •. μ΄λŸ¬ν•œ ν•¨μˆ˜λŠ” μƒμš©κ΅¬ μ½”λ“œλ₯Ό 쀄이고 μ½”λ“œλ₯Ό 더 κ°„κ²°ν•˜κ³  읽기 μ‰½κ²Œ λ§Œλ“œλŠ” 데 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ „λ°˜μ μœΌλ‘œ Kotlin λΌμ΄λΈŒλŸ¬λ¦¬λŠ” κ°œλ°œμžκ°€ λ‹€μŒμ„ μˆ˜ν–‰ν•˜λŠ” 데 도움이 λ˜λŠ” λ‹€μ–‘ν•œ μœ μš©ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. 보닀 κ°„κ²°ν•˜κ³  μ•ˆμ „ν•˜λ©° μœ μ§€ 관리 κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ‹­μ‹œμ˜€. λ΄‰μΈλœ 클래슀, ν™•μž₯ ν•¨μˆ˜, ν‘œμ€€ ν•¨μˆ˜, 코루틴, λ²”μœ„, μ»¬λ ‰μ…˜ 및 λ¬Έμžμ—΄ μ‘°μž‘ ν•¨μˆ˜λŠ” κ΄‘λ²”μœ„ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•œ κ°•λ ₯ν•˜κ³  λ‹€μž¬λ‹€λŠ₯ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

 

Sealed Classes:

sealed class Result<T>
class Success<T>(val data: T) : Result<T>()
class Error<T>(val message: String) : Result<T>()

fun <T> processResult(result: Result<T>) {
    when (result) {
        is Success -> {
            println("Data: ${result.data}")
        }
        is Error -> {
            println("Error: ${result.message}")
        }
    }
}

Extension Functions:

fun String.capitalizeWords(): String {
    return split(" ").joinToString(" ") { it.capitalize() }
}

val str = "kotlin is awesome"
val capitalized = str.capitalizeWords()
println(capitalized) // "Kotlin Is Awesome"

Standard Functions:

val list = listOf(1, 2, 3, 4, 5)
val even = list.filter { it % 2 == 0 }
val sum = list.fold(0) { acc, value -> acc + value }

println(even) // [2, 4]
println(sum) // 15

Ranges:

val range = 1..5
val grid = range.flatMap { i -> range.map { j -> i to j } }

grid.forEach { (x, y) -> println("($x, $y)") }
// (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5)

Collections:

val map = mapOf("a" to 1, "b" to 2, "c" to 3)

val doubled = map.mapValues { (_, value) -> value * 2 }
val sum = map.values.sum()

println(doubled) // {a=2, b=4, c=6}
println(sum) // 6

Coroutines:

suspend fun loadData() = withContext(Dispatchers.IO) {
    // Perform network request or other long-running operation
}

fun main() {
    GlobalScope.launch {
        val result = loadData()
        // Process result on main thread
    }
}

 

이 μ½”λ“œ μŠ€λ‹ˆνŽ«μ€ Kotlin λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅ν•˜λŠ” λͺ‡ κ°€μ§€ μœ μš©ν•œ κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” λ°©λ²•을 λ³΄μ—¬μ€λ‹ˆλ‹€. λ΄‰μΈλœ ν΄λž˜μŠ€, ν™•μž₯ ν•¨μˆ˜, ν‘œμ€€ ν•¨μˆ˜, μ½”루틴, λ²”μœ„ λ° μ»¬λ ‰μ…˜μ€ κ°œλ°œμžκ°€ λ” κ°„κ²°ν•˜κ³  μ•ˆμ „ν•˜λ©° μœ μ§€ κ΄€λ¦¬ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” λ° λ„움이 λ˜λŠ” λ§Žμ€ κΈ°λŠ₯ μ€‘ μΌλΆ€μ— λΆˆκ³Όν•©λ‹ˆλ‹€.

 

 

 

728x90