[Kotlin] inline ํ‚ค์›Œ๋“œ: ์˜๋ฏธ์™€ ์ตœ์ ์˜ ์‚ฌ์šฉ ์ƒํ™ฉ ๋ถ„์„

2025. 2. 27. 11:43ยทLanguages/Kotlin
๋ชฉ์ฐจ
  1. ์ธ๋ผ์ธ ํ•จ์ˆ˜์˜ ์ž‘๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜
  2. 1. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ ์ œ๊ฑฐ
  3. 2. ๋žŒ๋‹ค ํ‘œํ˜„์‹์˜ ๊ฐ์ฒด ์ƒ์„ฑ ์ตœ์†Œํ™”
  4. 3. ๋น„๋กœ์ปฌ ๋ฐ˜ํ™˜(Non-local return) ์ง€์›
  5. ์ธ๋ผ์ธ ํ•จ์ˆ˜์˜ ์ตœ์  ์‚ฌ์šฉ ์‚ฌ๋ก€
  6. 1. ๊ณ ์ฐจ ํ•จ์ˆ˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  7. 2. Reified ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ ํ™œ์šฉ
  8. 3. ์ธ๋ผ์ธ ํด๋ž˜์Šค(Inline Classes)์™€์˜ ์—ฐ๋™
  9. ์ฃผ์˜ ์‚ฌํ•ญ ๋ฐ ์‚ฌ์šฉ ๊ธˆ์ง€ ์‚ฌ๋ก€
  10. 1. ๋Œ€๊ทœ๋ชจ ํ•จ์ˆ˜์˜ ์ธ๋ผ์ด๋‹ ํšŒํ”ผ
  11. 2. ๊ณต๊ฐœ API ์„ค๊ณ„ ์‹œ ์ฃผ์˜
  12. 3. ์žฌ๊ท€ ํ•จ์ˆ˜ ๋ฐ ๋ณต์žกํ•œ ์ œ์–ด ํ๋ฆ„
  13. ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ ๋น„๊ต
  14. ๊ฒฐ๋ก  ๋ฐ ๊ถŒ์žฅ ์‚ฌํ•ญ
์„ฌ๋„ค์ผ.jpg

Kotlin์˜ inline ํ‚ค์›Œ๋“œ: ์˜๋ฏธ์™€ ์ตœ์ ์˜ ์‚ฌ์šฉ ์ƒํ™ฉ ๋ถ„์„

์ฝ”ํ‹€๋ฆฐ์˜ inline ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด ํ‚ค์›Œ๋“œ๋ฅผ ์ ์šฉํ•œ ํ•จ์ˆ˜๋Š” ์ปดํŒŒ์ผ ์‹œ ํ˜ธ์ถœ ์ง€์ ์— ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ์ง์ ‘ ์‚ฝ์ž…(inline)ํ•˜์—ฌ ์‹คํ–‰ ํ๋ฆ„์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๊ณ ์ฐจ ํ•จ์ˆ˜(higher-order functions)์™€ ๋žŒ๋‹ค ํ‘œํ˜„์‹์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ผ์ธ ํ•จ์ˆ˜์˜ ์ž‘๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜

1. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ ์ œ๊ฑฐ

์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ์Šคํƒ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ, ์ ํ”„ ๋ช…๋ น์–ด ์‹คํ–‰, ๋ฐ˜ํ™˜ ์ฃผ์†Œ ๊ด€๋ฆฌ ๋“ฑ์˜ ๊ณผ์ •์„ ์ˆ˜๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด inline ํ•จ์ˆ˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ํ˜ธ์ถœ ์œ„์น˜์— ์ง์ ‘ ๋ณต์‚ฌํ•˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด lock() ํ•จ์ˆ˜๋ฅผ ์ธ๋ผ์ธ์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ๋ฝ ํš๋“/ํ•ด์ œ ๋กœ์ง์ด ํ˜ธ์ถœ๋ถ€์— ์ง์ ‘ ์‚ฝ์ž…๋˜์–ด ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋น„์šฉ์ด ์—†์–ด์ง‘๋‹ˆ๋‹ค.

inline fun <T> synchronized(lock: Lock, action: () -> T): T {  
    lock.lock()  
    try {  
        return action()  
    } finally {  
        lock.unlock()  
    }  
}  

2. ๋žŒ๋‹ค ํ‘œํ˜„์‹์˜ ๊ฐ์ฒด ์ƒ์„ฑ ์ตœ์†Œํ™”

๊ณ ์ฐจ ํ•จ์ˆ˜์—์„œ ๋žŒ๋‹ค๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•  ๋•Œ๋งˆ๋‹ค ์ต๋ช… ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ํ•จ์ˆ˜๋Š” ๋žŒ๋‹ค ๋ณธ๋ฌธ๋„ ํ˜ธ์ถœ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ฐฉ์ง€๋ฉ๋‹ˆ๋‹ค. 10๋งŒ ํšŒ ํ˜ธ์ถœ๋˜๋Š” ๋ฃจํ”„ ๋‚ด๋ถ€์—์„œ 1KB ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, ์ธ๋ผ์ด๋‹์„ ํ†ตํ•ด ์ด 100MB์˜ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋น„๋กœ์ปฌ ๋ฐ˜ํ™˜(Non-local return) ์ง€์›

์ธ๋ผ์ธ๋˜์ง€ ์•Š์€ ๋žŒ๋‹ค๋Š” return์„ ์‚ฌ์šฉํ•ด ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ํƒˆ์ถœํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ธ๋ผ์ธ ๋žŒ๋‹ค๋Š” ํ˜ธ์ถœ๋ถ€์— ์ง์ ‘ ์‚ฝ์ž…๋˜๋ฏ€๋กœ ์ด ์ œ์•ฝ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ์ปฌ๋ ‰์…˜ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜(forEach)๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ์ œ์–ด ํ๋ฆ„ ๊ตฌํ˜„์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

fun findUser(users: List<User>): User? {  
    users.forEach {  
        if (it.id == targetId) return it // ์™ธ๋ถ€ ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜  
    }  
    return null  
}  

์ธ๋ผ์ธ ํ•จ์ˆ˜์˜ ์ตœ์  ์‚ฌ์šฉ ์‚ฌ๋ก€

1. ๊ณ ์ฐจ ํ•จ์ˆ˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”

๋žŒ๋‹ค๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ๋นˆ๋ฒˆํžˆ ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ repeat, map, filter ํ•จ์ˆ˜๋“ค์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

inline fun repeat(times: Int, action: (Int) -> Unit) {  
    for (index in 0 until times) {  
        action(index)  
    }  
}  

2. Reified ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ ํ™œ์šฉ

์ œ๋„ค๋ฆญ ํƒ€์ž…์˜ ๋Ÿฐํƒ€์ž„ ์ •๋ณด์— ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ reified ํ‚ค์›Œ๋“œ์™€ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜ ์—†์ด ํƒ€์ž… ์ฒดํฌ(is T)๋‚˜ ํด๋ž˜์Šค ๋ฆฌํ„ฐ๋Ÿด(T::class) ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

inline fun <reified T> parseJson(json: String): T {  
    return Gson().fromJson(json, T::class.java)  
}  

val user = parseJson<User>(jsonString) // ํƒ€์ž… ์ถ”๋ก  ๊ฐ€๋Šฅ  

3. ์ธ๋ผ์ธ ํด๋ž˜์Šค(Inline Classes)์™€์˜ ์—ฐ๋™

value class๋กœ ์„ ์–ธ๋œ ์ธ๋ผ์ธ ํด๋ž˜์Šค๋Š” ๋ž˜ํผ ํƒ€์ž…์˜ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ๊ธฐ๋ณธ ํƒ€์ž…์œผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ํŠนํ™” ํƒ€์ž…(์˜ˆ: UserId, Email)์„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

@JvmInline  
value class UserId(val value: String)  

fun authenticate(id: UserId) { /* ... */ }  

์ฃผ์˜ ์‚ฌํ•ญ ๋ฐ ์‚ฌ์šฉ ๊ธˆ์ง€ ์‚ฌ๋ก€

1. ๋Œ€๊ทœ๋ชจ ํ•จ์ˆ˜์˜ ์ธ๋ผ์ด๋‹ ํšŒํ”ผ

50์ค„ ์ด์ƒ์˜ ํ•จ์ˆ˜๋ฅผ ์ธ๋ผ์ธํ•˜๋ฉด ๋ฐ”์ดํŠธ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. JVM์˜ JIT ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”๋ฅผ ๋ฐฉํ•ดํ•˜๋ฏ€๋กœ ๊ฐ„๊ฒฐํ•œ ํ•จ์ˆ˜์—๋งŒ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ณต๊ฐœ API ์„ค๊ณ„ ์‹œ ์ฃผ์˜

ํผ๋ธ”๋ฆญ ์ธ๋ผ์ธ ํ•จ์ˆ˜๋Š” ๋ชจ๋“ˆ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ์ธ๋ผ์ด๋‹๋˜๋ฏ€๋กœ, ๋‚ด๋ถ€(private) ๊ตฌํ˜„์„ ์ฐธ์กฐํ•  ๊ฒฝ์šฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜ธํ™˜์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @PublishedApi ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ œํ•œ์ ์œผ๋กœ ๊ณต๊ฐœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. ์žฌ๊ท€ ํ•จ์ˆ˜ ๋ฐ ๋ณต์žกํ•œ ์ œ์–ด ํ๋ฆ„

์ธ๋ผ์ธ ํ•จ์ˆ˜๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, crossinline์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๋žŒ๋‹ค์—์„œ ๋น„๋กœ์ปฌ ๋ฐ˜ํ™˜์„ ์‹œ๋„ํ•˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋ถ„๊ธฐ ๋กœ์ง์ด ํฌํ•จ๋œ ํ•จ์ˆ˜๋Š” ์ธ๋ผ์ด๋‹์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

inline fun execute(crossinline task: () -> Unit) {  
    val job = object : Runnable {  
        override fun run() {  
            task() // crossinline ์—†์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜  
        }  
    }  
    executor.submit(job)  
}  

์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ ๋น„๊ต

๋‹ค์Œ ํ‘œ๋Š” 100๋งŒ ํšŒ ๋ฐ˜๋ณต ์‹œ ์ธ๋ผ์ธ ์ ์šฉ ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ์‹คํ–‰ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค์ธ๋ผ์ธ ์ ์šฉ ์‹œ๊ฐ„(ms)๋ฏธ์ ์šฉ ์‹œ๊ฐ„(ms)
๋‹จ์ˆœ ๋žŒ๋‹ค ํ˜ธ์ถœ1245
์บก์ฒ˜ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋žŒ๋‹ค15320
reified ํƒ€์ž… ์ฒดํฌ18210 (๋ฆฌํ”Œ๋ ‰์…˜

๊ฒฐ๋ก  ๋ฐ ๊ถŒ์žฅ ์‚ฌํ•ญ

์ธ๋ผ์ธ ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ๊ณ ๋นˆ๋„ ํ˜ธ์ถœ๋˜๋Š” ์ž‘์€ ๊ณ ์ฐจ ํ•จ์ˆ˜(3์ค„ ์ด๋‚ด)
  • ๋žŒ๋‹ค ์บก์ฒ˜๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์šฐ๋ ค ์‹œ
  • ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ์š”๊ตฌํ•˜๋Š” ์ œ๋„ค๋ฆญ API ์„ค๊ณ„
  • ์ปค์Šคํ…€ ์ œ์–ด ํ๋ฆ„ ์—ฐ์‚ฐ์ž ๊ฐœ๋ฐœ

๋ฐ˜๋ฉด ํ•จ์ˆ˜ ๋ณธ๋ฌธ์ด ๋ณต์žกํ•˜๊ฑฐ๋‚˜, ๋ชจ๋“ˆ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋Š” ๊ณต๊ฐœ API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ๋Š” ์‹ ์ค‘ํ•œ ์ ‘๊ทผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. noinline๊ณผ crossinline์„ ์ ์ ˆํžˆ ์กฐํ•ฉํ•˜์—ฌ ๋žŒ๋‹ค ์ธ๋ผ์ด๋‹์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๊ท ํ˜•์„ ์žก๋Š” ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

์ธ๋ผ์ธ ๊ธฐ๋Šฅ์€ ์ฝ”ํ‹€๋ฆฐ์ด JVM ์ œ์•ฝ์„ ๊ทน๋ณตํ•˜๋ฉด์„œ๋„ ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด(DSL)์™€ ๊ฐ™์€ ์ถ”์ƒํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ทผ๊ฐ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚จ์šฉ ์‹œ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ ์„ฑ๋Šฅ ๊ฒ€์ฆ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
  1. ์ธ๋ผ์ธ ํ•จ์ˆ˜์˜ ์ž‘๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜
  2. 1. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ ์ œ๊ฑฐ
  3. 2. ๋žŒ๋‹ค ํ‘œํ˜„์‹์˜ ๊ฐ์ฒด ์ƒ์„ฑ ์ตœ์†Œํ™”
  4. 3. ๋น„๋กœ์ปฌ ๋ฐ˜ํ™˜(Non-local return) ์ง€์›
  5. ์ธ๋ผ์ธ ํ•จ์ˆ˜์˜ ์ตœ์  ์‚ฌ์šฉ ์‚ฌ๋ก€
  6. 1. ๊ณ ์ฐจ ํ•จ์ˆ˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  7. 2. Reified ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ ํ™œ์šฉ
  8. 3. ์ธ๋ผ์ธ ํด๋ž˜์Šค(Inline Classes)์™€์˜ ์—ฐ๋™
  9. ์ฃผ์˜ ์‚ฌํ•ญ ๋ฐ ์‚ฌ์šฉ ๊ธˆ์ง€ ์‚ฌ๋ก€
  10. 1. ๋Œ€๊ทœ๋ชจ ํ•จ์ˆ˜์˜ ์ธ๋ผ์ด๋‹ ํšŒํ”ผ
  11. 2. ๊ณต๊ฐœ API ์„ค๊ณ„ ์‹œ ์ฃผ์˜
  12. 3. ์žฌ๊ท€ ํ•จ์ˆ˜ ๋ฐ ๋ณต์žกํ•œ ์ œ์–ด ํ๋ฆ„
  13. ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ ๋น„๊ต
  14. ๊ฒฐ๋ก  ๋ฐ ๊ถŒ์žฅ ์‚ฌํ•ญ
'Languages/Kotlin' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Kotlin] class์™€ object ์ฐจ์ด์ 
  • [Kotlin] ์ฝ”ํ‹€๋ฆฐ let, run, apply, also, with์˜ ์ฐจ์ด์™€ ์ ์ ˆํ•œ ์‚ฌ์šฉ ์ƒํ™ฉ ๋ถ„์„
  • Kotlin ํ™•์žฅ ํ•จ์ˆ˜(Extension Function) ๋ž€
  • Kotlin sealed class ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž
์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
์ผ์ƒ, ๊ฒŒ์ž„, ๋ง›์ง‘, ์—ฌํ–‰, ๊ฐœ๋ฐœ, IT ๋ธ”๋กœ๊ทธ๐Ÿงž
  • ์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
    ์š”์ˆ  ๋žจํ”„๐Ÿซ–
    ์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • All (549)
      • Languages (57)
        • JAVA (13)
        • JSP (1)
        • C_C++ (4)
        • Html (3)
        • CSS (1)
        • JavaScript (18)
        • Python (3)
        • Kotlin (13)
        • TypeScript (1)
      • Framework (14)
        • spring (11)
        • jstl (1)
        • angular (2)
      • Tool (28)
        • Eclipse (5)
        • vsCode (3)
        • scrcpy (2)
        • Git (1)
        • IntelliJ (6)
        • Visual-studio (1)
        • UML (1)
        • Gradle (8)
      • DB (6)
        • Oracle (1)
        • MySql (3)
        • Mongo (2)
      • OS (14)
        • Linux (2)
        • Windows (12)
      • Server (8)
        • Tomcat (1)
        • Apache (1)
        • Node.js (6)
      • Programmings (25)
        • Design Pattern (2)
        • Funny (20)
        • Algorithms (3)
      • Cloud (8)
        • Docker (1)
        • Kubernetes (4)
        • Istio (1)
        • ArgoCD (2)
      • IT (5)
        • gRPC (3)
        • RESTful (3)
        • Web UI (5)
        • AI (4)
      • Book (6)
      • TIP (187)
      • Life (53)
      • Game (83)
      • Storage (22)
      • ์‹๋‹น (15)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ์‚ฌ์ดํŠธ๋งต
    • RSS
    • ๊ธฐํƒ€ ์†Œ๋“
  • ๋งํฌ

    • ๊ตฌ๊ธ€
    • ๋„ค์ด๋ฒ„
    • ์ •๋ถ€24
    • Spring Framework ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • Kotlin ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • ์นด์นด์˜ค ์• ๋“œํ•
    • ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ๋งต
    • ๋ธ”๋กœ๊ทธ RSS
  • ๊ณต์ง€์‚ฌํ•ญ

    • ์•ˆ๋…•ํ•˜์„ธ์š”
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฐ์ผ๋ฆฌ ๋‰ด์Šค
    ๋‰ด์Šค
    ๋‰ด์Šค ๋ธŒ๋ฆฌํ•‘
    ๋ธŒ๋ฆฌํ•‘
    ํ€˜์ŠคํŠธ
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ์™€์ผ์ฆˆ
    ์˜ค๋Š˜์˜๋‰ด์Šค
    ํƒœ๊ตญ
    ํ•œ๋ˆˆ์— ๋ณด๋Š” ์˜ค๋Š˜์˜ ๋‰ด์Šค
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ๋‚˜์šฐ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ง€๋‹ˆ๐Ÿงžโ€โ™‚๏ธ๐Ÿฅญ
[Kotlin] inline ํ‚ค์›Œ๋“œ: ์˜๋ฏธ์™€ ์ตœ์ ์˜ ์‚ฌ์šฉ ์ƒํ™ฉ ๋ถ„์„

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.