Inline

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


inline ํ‚ค์›Œ๋“œ์˜ ๋™์ž‘

inline ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ œ๊ฑฐํ•˜๊ณ  ๊ทธ ๋‚ด์šฉ์„ ํ˜ธ์ถœ ์œ„์น˜์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋žŒ๋‹ค ์บก์ฒ˜์— ๋”ฐ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์‹œ

inline fun execute(action: () -> Unit) {
    println("Start")
    action()
    println("End")
}

fun main() {
    execute {
        println("Running action")
    }
}

์ปดํŒŒ์ผ ์ „ ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ

์œ„ ์ฝ”๋“œ๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜ execute์™€ ๋žŒ๋‹ค ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋žŒ๋‹ค๊ฐ€ ์ต๋ช… ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜๋˜์–ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

inline fun execute(action: () -> Unit) {
    println("Start")
    action()
    println("End")
}

main ํ•จ์ˆ˜์—์„œ ๊ณ ์ฐจ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค:

fun main() {
    execute {
        println("Running action")
    }
}

์ปดํŒŒ์ผ ํ›„ ๋””์ปดํŒŒ์ผ๋œ Java ์ฝ”๋“œ

inline ํ‚ค์›Œ๋“œ๋กœ ์ธํ•ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ œ๊ฑฐ๋˜๊ณ  ์ฝ”๋“œ๊ฐ€ ํ˜ธ์ถœ ์œ„์น˜์— ์‚ฝ์ž…๋ฉ๋‹ˆ๋‹ค. ๋””์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค:

public final class MainKt {
    public static final void main() {
        System.out.println("Start");
        System.out.println("Running action");
        System.out.println("End");
    }
}

๋””์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ๋ถ„์„

execute ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ , ํ•จ์ˆ˜ ๋ณธ๋ฌธ์ด main ํ•จ์ˆ˜์— ์ง์ ‘ ์‚ฝ์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋žŒ๋‹ค ํ‘œํ˜„์‹์ด ์ต๋ช… ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š์•„ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


inline์˜ ์ด์ 

ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ ์ œ๊ฑฐ

์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•˜๊ณ , ํ˜ธ์ถœ ํ›„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. inline์€ ์ด๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋žŒ๋‹ค ์บก์ฒ˜ ๋น„์šฉ ๊ฐ์†Œ

๋žŒ๋‹ค ํ‘œํ˜„์‹์ด ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์บก์ฒ˜ํ•˜๋ฉด ์ต๋ช… ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. inline ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๋น„์šฉ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


inline ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

์ฝ”๋“œ ํฌ๊ธฐ ์ฆ๊ฐ€

inline ํ‚ค์›Œ๋“œ๋ฅผ ๋‚จ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ๋ณธ๋ฌธ์ด ์—ฌ๋Ÿฌ ๊ณณ์— ์‚ฝ์ž…๋˜์–ด ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

noinline ํ‚ค์›Œ๋“œ

ํŠน์ • ๋žŒ๋‹ค๋ฅผ ์ธ๋ผ์ธํ™”ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด noinline ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

inline fun process(action: () -> Unit, noinline anotherAction: () -> Unit) {
    action()
    anotherAction()
}

anotherAction์€ ์ธ๋ผ์ธํ™”๋˜์ง€ ์•Š๊ณ , ๋ณ„๋„์˜ ๊ฐ์ฒด๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

crossinline ํ‚ค์›Œ๋“œ

๋žŒ๋‹ค์—์„œ ๋น„์ง€์—ญ ๋ฐ˜ํ™˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ crossinline ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

inline fun runTask(crossinline action: () -> Unit) {
    Thread {
        action()
    }.start()
}

crossinline์€ ๋น„์ง€์—ญ ๋ฐ˜ํ™˜์„ ๋ฐฉ์ง€ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.


inline์˜ ๋™์ž‘ ํ๋ฆ„

์ปดํŒŒ์ผ ์‹œ์ 

ํ•จ์ˆ˜ ๋ณธ๋ฌธ์ด ํ˜ธ์ถœ ์œ„์น˜์— ์‚ฝ์ž…๋˜๊ณ , ๋žŒ๋‹ค ์บก์ฒ˜์— ์˜ํ•œ ์ต๋ช… ๊ฐ์ฒด ์ƒ์„ฑ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ์‹œ์ 

ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์ค„์–ด๋“ค๊ณ , ์‚ฝ์ž…๋œ ์ฝ”๋“œ๊ฐ€ ์ง์ ‘ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

inline ํ‚ค์›Œ๋“œ๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋žŒ๋‹ค ํ‘œํ˜„์‹ ์‚ฌ์šฉ์—์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ ํฌ๊ธฐ ์ฆ๊ฐ€์™€ ๊ฐ™์€ ๋ถ€์ž‘์šฉ์„ ๊ณ ๋ คํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ๊ธ€์—์„œ๋Š” inline์˜ ์ปดํŒŒ์ผ ์ „ํ›„ ๋™์ž‘๊ณผ ์ด์ ์„ ๋ถ„์„ํ•˜๋ฉฐ, ์ตœ์ ํ™” ๋„๊ตฌ๋กœ์„œ์˜ ๊ฐ€๋Šฅ์„ฑ์„ ํƒ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Last updated

Was this helpful?