-
[Kotlin] Scope functions (let, with, run, apply, also) ์ดํดAndroid/Kotlin 2021. 11. 8. 01:10๋ฐ์ํ
Scope functions ์ด๋?
์ฝํ๋ฆฐ์ผ๋ก ๊ฐ๋ฐ์ ํ๋ฉด์ ์ฌ๋ฌ Scope function๋ค์ ์ฌ์ฉํ์์ง๋ง, ์ฌ์ฉํ๋ฉด์๋ ์ ๋๋ก ์ฌ์ฉํ๊ณ ์๋์ง ์๊ตฌ์ฌ์ด ๋ค ๋๋ ๋ง์๊ณ ์ํฉ์ ๋ฐ๋ผ ์ด๋ค Scope function๋ค์ ์ฌ์ฉํ๋๊ฒ ์ข์์ง ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค. ๊ณต์๋ฌธ์๋ฅผ ๋ณด๊ณ ์ ๋๋ก ๊ณต๋ถํ๊ธฐ๋ก ๋ง์์ ๋จน์๊ณ ๊ณต์๋ฌธ์๋ฅผ ํ ๋๋ก ๊ฐ๋ฐ ๊ฒฝํ๊ณผ ํจ๊ป ๊ธ์ ์์ฑํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋จผ์ , Scope function์ 5๊ฐ๋ก let, with, run,apply, also ๊ฐ ์ฝํ๋ฆฐ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋์ด ์์ต๋๋ค. Scope function์ ๋ง ๊ทธ๋๋ก ๋ฒ์(Scope)๊ฐ ์๊ธฐ๋๋ฐ ํด๋น ๋ฒ์๋ ํน์ ๊ฐ์ฒด์ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์ผ๋ จ์ ๋์์ ํฌํจํ๋ ํจ์์ ๋๋ค. Scope function์ ๋๋ค์๊ณผ ๋์ผํ๊ฒ ์์ฑ์ ํ๋ฉฐ, ์ธ์คํด์ค์ ํด๋นํ๋ ๋ณ์ ์์ด ๋ด๋ถ ๋ณ์๋ ๋ฉ์๋๋ค์ ์ ๊ทผํ ์ ์์ต๋๋ค.val alice = Person("Alice", 20, "Amsterdam") println(alice) alice.moveTo("London") alice.incrementAge() println(alice)
ํด๋น ์ฝ๋๋ Scope function์ ์ฌ์ฉํ์ง ์๊ณ ์์ฑํ ์ฝ๋๋ก ๊ฐ์ฒด๋ฅผ ํน์ ๋ณ์์ ๋์ ์ ํ ํ ํด๋น ๋ณ์๋ฅผ ํตํด์ ๋ฉ์๋๋ค์ ํธ์ถํ๋ ๋ชจ์ต๋ค์ ํ์ธํ ์ ์์ต๋๋ค.
Person("Alice", 20, "Amsterdam").let { println(it) it.moveTo("London") it.incrementAge() println(it) }
๋ค์์ Scope function ์ค ํ๋์ธ let ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๋๋ก ์์ฑํ ์ฝ๋์ ๋๋ค. ์์ธํ ๋น๊ต๋ ์๋์์ ํ๊ฒ ์ง๋ง Scope function์ ์ฌ์ฉํ์ง ์์์ ๋๋ณด๋ค ๊ฐ๋ ์ฑ์ด ์์ผ๋ฉฐ, ์๋ก์ด ๋ณ์๋ค์ ์์ฑํ๊ณ ํด๋น ๋ณ์๋ค๋ก ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ ์๋ it ์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
Scope function ๋น๊ต
๊ฐ Scope function๋ค์ ์์ ํ๊ธฐ ์ ์ ๊ณตํต์ ์ด ๋ฌด์์ด๊ณ , ์ฐจ์ด์ ์ ํ์ธํ๊ธฐ ์ํด์ ์ด๋ค ์ ์ ์ง์ค์ ์ผ๋ก ํ์ธํ๋ฉด ๋๋์ง ์ค๋ช ํ๊ฒ ์ต๋๋ค. ์ผ๋จ Scope function์ ํน์ ๊ฐ์ฒด์ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ง๋ ๋ฒ์(Scope)๋ฅผ ์์ฑํ์ฌ ๋ฒ์ ๋ด์ ์ฝ๋๋ค์ ์คํํ๋ ๊ฒ์ด ๊ณตํต์ ์ธ ๋ชฉ์ ์ ๋๋ค. ํ์ง๋ง ํจ์๋ค๋ง๋ค ์ฐจ์ด๊ฐ ์กฐ๊ธ์ฉ ์กด์ฌํ๋๋ฐ ์ฒซ ๋ฒ์งธ๋ก๋ ๋ฒ์ ๋ด์์ ๊ฐ์ฒด์ ์ปจํ ์คํธ๋ฅผ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ๊ณผ Scope function์ ๋ฐํ๊ฐ์์ ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค. 2๊ฐ์ง ์ฐจ์ด์ ์ ์ค์ ์ผ๋ก ๊ฐ ํจ์๋ค์ด ์ด๋ป๊ฒ ๋์์ ํ๊ณ ํ์ฉ๋๋์ง ํ์ธํด๋ณด๋ฉด ์ข์ต๋๋ค.
let
/** * Calls the specified function [block] with `this` value as its argument and returns its result. * * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#let). */ @kotlin.internal.InlineOnly public inline fun <T, R> T.let(block: (T) -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this) }
๋ค์์ let ํจ์๋ฅผ ์ ์ํ๋ ์ฝ๋์ ๋๋ค. let์ T ๋ผ๋ Generic ๊ฐ์ฒด์ ํ์ฅํจ์๋ก ์ ์๋์ด ์์ผ๋ฉฐ block ์ด๋ผ๋ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ ํธ์ถํ๋ ์ฝ๋์ ๋๋ค. block ํจ์๋ T ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ณ R์ ๋ฆฌํดํ๋ ํจ์์ ๋๋ค. ์ ์๋ก๋ง ๋ณด๋ฉด ์ ํํ๊ฒ ์๊ธฐ ์ด๋ ค์์ ์์ ์ ๊ฐ์ด ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
val numbers = mutableListOf("one", "two", "three", "four", "five") numbers.map { it.length }.filter { it > 3 }.let { println(it) // and more function calls if needed }
Kotlin ๊ณต์ ๋ฌธ์์ ์์ ๋ฅผ ํตํด ์์๋ณด๊ฒ ์ต๋๋ค. ๊ฐ๋จํ๊ฒ let ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ๊น์ง ์ฝ๋๋ฅผ ์ค๋ช ํ์๋ฉด numbers์ ๋ฆฌ์คํธ๋ฅผ map ํจ์๋ฅผ ํตํด ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ด๋ ๋ฆฌ์คํธ {3,3,5,4,4} ๋ก ๋ณํํ๊ฒ ๋ฉ๋๋ค. ์ดํ filter ํจ์๋ก ๊ฐ์ด 3 ์ด์์ผ๋ก๋ง ํํฐ๋งํ๊ฒ ๋์ด {5,4,4} ๋ก ๋ณํ๋ฉ๋๋ค.
let ํจ์์์ ๋๋คํํ์์ผ๋ก ํํ์ด ๋ ์์ด block ํจ์๊ฐ ๋๊ณ T ๋งค๊ฐ๋ณ์๋ ๋ฆฌ์คํธ๊ฐ ํด๋น์ด ๋๊ณ R์ ๋ง์ง๋ง ์ฝ๋์ธ println์ ๋ฆฌํด๊ฐ์ธ Unit์ด ๋ฉ๋๋ค. block ํจ์์์ ๋ฆฌ์คํธ ์ปจํ ์คํธ ์ ๊ทผํ๊ธฐ ์ํด์๋ it ์ด๋ผ๋ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋ฉฐ ์ปค์คํ ํ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
val str: String? = "Hello" //processNonNullString(str) // compilation error: str can be null val length = str?.let { println("let() called on $it") processNonNullString(it) // OK: 'it' is not null inside '?.let { }' it.length }
๋ํ let์ ์ฃผ๋ก non-null ๋ณ์์ ํจ๊ป ์ฌ์ฉํ์ฌ null check์ ๋์์ ์ํ๋ ๋ฉ์๋๋ฅผ ์คํํ๋๋ก ํฉ๋๋ค. ?. ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ null์ด๋ฉด ์คํํ์ง ์๋๋ก ํ๊ณ null์ด ์๋๋ฉด let ํจ์๋ฅผ ์คํํ๋๋ก ํ์ฌ null check๋ฅผ ํ ์ ์์ต๋๋ค. ์ ๋ํ let ํจ์๋ ๋๋ถ๋ถ null checkํ๋ฉด์ non-null์ด๋ฉด ํน์ ๋ฉ์๋๋ค์ ์คํํ๋๋ก ์ฌ์ฉํฉ๋๋ค.
์ ๋ฆฌ๋ฅผ ํ์๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
- Scope ๋ด์์ ํด๋น ์ปจํ ์คํธ ๊ฐ์ฒด๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์๋ it ์ด๋ผ๋ ๋งค๊ฐ๋ณ์ ์ฌ์ฉ, ์ปค์คํ ํ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ๋ฐํ ๊ฐ์ block ํจ์์ ๋ฐํ ๊ฐ
- null check์ ํจ๊ป block ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด ์ฌ์ฉ
with
/** * Calls the specified function [block] with the given [receiver] as its receiver and returns its result. * * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#with). */ @kotlin.internal.InlineOnly public inline fun <T, R> with(receiver: T, block: T.() -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return receiver.block() }
๋ค์์ with ํจ์๋ฅผ ์ ์ํ๋ ์ฝ๋์ ๋๋ค. with์ let๊ณผ ๋ค๋ฅด๊ฒ ํ์ฅํจ์๋ก ์ ์๋์ด ์์ง ์๊ณ T ์ block ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ํธ์ถํ๋ ์ฝ๋์ ๋๋ค. block ํจ์๋ T ์ปจํ ์คํธ ๋ด์ ์ ์๋ ํจ์๋ก R์ ๋ฆฌํดํ๋ ํจ์์ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์ ํจ๊ป ๋ถ๊ฐ ์ค๋ช ์ ํ๊ฒ ์ต๋๋ค.
val numbers = mutableListOf("one", "two", "three") with(numbers) { println("'with' is called with argument $this") println("It contains $size elements") }
์ฃผ๋ก with ํจ์๋ ๋ฐํ ๊ฐ์ ํน์ ๋ณ์์ ๋์ ํ์ง ์๊ณ ๋งค๊ฐ๋ณ์๋ก ๋์ ๋ T ์ปจํ ์คํธ ๋ด์ ๋ฉ์๋๋ค์ด ์ฐ์์ ์ผ๋ก ์คํํ๋๋ก ํฉ๋๋ค. ์์ ์์ ์์๋ numbers๊ฐ T ์ ํด๋น๋๊ณ , block ํจ์๋ ๋๋คํํ์์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅํ์ฌ ๋ธ๋ญ ๋ด์ ์ฌ๋ฌ ๋ฉ์๋๋ค์ด ์ ์๋์ด ์์ต๋๋ค. block์ ํด๋น ๊ฐ์ฒด ์ปจํ ์คํธ๋ฅผ this๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ , ๊ทธ์ธ ๋ฉค๋ฒ๋ณ์ ๋๋ ๋ฉ์๋๋ค์ ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
val numbers = mutableListOf("one", "two", "three") val firstAndLast = with(numbers) { "The first element is ${first()}," + " the last element is ${last()}" } println(firstAndLast)
๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋ ํด๋น ๊ฐ์ฒด๋ฅผ ๋ฐ์ ์๋ก์ด ๋ณ์๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. numbers๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ first์ last์ ๋ฉ์๋๋ค์ ์ฌ์ฉํ์ฌ ํ๋์ ๋ฌธ์์ด์ ๋ฆฌํดํ๋ ํจ์๋ก ์ฌ์ฉํ์์ต๋๋ค.
์ ๋ฆฌ๋ฅผ ํ์๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
- Scope ๋ด์์ ํด๋น ์ปจํ ์คํธ ๊ฐ์ฒด๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์๋ this ์ง์ ์ฌ์ฉ
- ๋ฐํ ๊ฐ์ block ํจ์์ ๋ฐํ ๊ฐ
- T ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ ํด๋น ์ปจํ ์คํธ ๋ด์ ๋ฉ์๋๋ค์ ์ฐ์์ ์ผ๋ก ํธ์ถํ๋๋ฐ ์ฃผ๋ก ์ฌ์ฉ
run
/** * Calls the specified function [block] with `this` value as its receiver and returns its result. * * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#run). */ @kotlin.internal.InlineOnly public inline fun <T, R> T.run(block: T.() -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block() }
๋ค์์ run ํจ์๋ฅผ ์ ์ํ๋ ์ฝ๋์ ๋๋ค. with๊ณผ ๋น์ทํ๊ฒ block ํจ์๊ฐ T ์ปจํ ์คํธ ๋ด์ ์ ์๋ ํจ์๋ก block์ ๋ฆฌํด๊ฐ์ด R๋ก ๋ฐํ์ด ๋ฉ๋๋ค. ํ์ง๋ง run ํจ์๋ let๊ณผ ๋์ผํ๊ฒ T ์ ํ์ฅํจ์๋ก ์ ์๋์ด ์์ต๋๋ค.
val service = MultiportService("https://example.kotlinlang.org", 80) val result = service.run { port = 8080 query(prepareRequest() + " to port $port") } // the same code written with let() function: val letResult = service.let { it.port = 8080 it.query(it.prepareRequest() + " to port ${it.port}") }
run ํจ์๋ ์ฃผ๋ก ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ์ ๋์์ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฆฌํด๊ฐ์ผ๋ก ํ์ํ ๋ ์ ์ฉํฉ๋๋ค. run ํจ์์์๋ T ์ปจํ ์คํธ๋ฅผ this๋ก ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฉฐ ๋ฉค๋ฒ๋ณ์, ๋ฉ์๋ ๋ํ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ํ, run์ ํ์ฅ ํจ์๊ฐ ์๋ with๊ณผ ๊ฐ์ด ๊ฐ์ฒด์ ์ปจํ ์คํธ ์์ด ํธ์ถํ ์ ์๋๋ฐ ์ด ๋๋ ๋ด๋ถ์ ๋ฉ์๋๋ค์ ์คํ ํ ๋ฐํ๊ฐ์ ์ ๋ฌํ๋ ์ญํ ๋ง ํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ก ์์ ๋ก ๋ค๋ฃจ์ง ์๊ณ kotlin ๊ณต์ ๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค.
์ ๋ฆฌ๋ฅผ ํ์๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
- Scope ๋ด์์ ํด๋น ์ปจํ ์คํธ ๊ฐ์ฒด๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์๋ this ์ง์ ์ฌ์ฉ
- ๋ฐํ ๊ฐ์ block ํจ์์ ๋ฐํ ๊ฐ
- ๊ฐ์ฒด์ ์ด๊ธฐํ์ ๋์์ ๋ฐํ ๊ฐ์ด ํ์ํ ๋ ์ฃผ๋ก ์ฌ์ฉ
apply
/** * Calls the specified function [block] with `this` value as its receiver and returns `this` value. * * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#apply). */ @kotlin.internal.InlineOnly public inline fun <T> T.apply(block: T.() -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() return this }
๋ค์์ apply ํจ์๋ฅผ ์ ์ํ๋ ์ฝ๋์ ๋๋ค. ์์์ ์ค๋ช ํ let, with, run๊ณผ๋ ๋ค๋ฅด๊ฒ block ํจ์์ ๋ฐํ๊ฐ์ ์์ต๋๋ค. apply ํจ์๋ block ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ T ์ปจํ ์คํธ ๋ด์์ ์ํ๋ ๋์์ ํ ํ T ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ฐํํ๋ ํจ์์ ๋๋ค.
val adam = Person("Adam").apply { age = 32 city = "London" } println(adam)
apply๊ฐ ํด๋น ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ฐํํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค. builder ํจํด๊ณผ ์ ์ฌํ๊ฒ apply ํจ์๋ก ๋ฉค๋ฒ๋ณ์๋ค์ ์ด๊ธฐํํ ํ ๋ฐํ๋ ๊ฐ์ฒด๋ก ํน์ ๋ณ์์ ๋์ ํ๊ฑฐ๋ ์ํ๋ ๊ธฐ๋ฅ์ ์ฐ์์ ์ผ๋ก ํธ์ถํ ์ ์์ต๋๋ค. this๋ก T ์ปจํ ์คํธ ๊ฐ์ฒด๋ฅผ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ ๋ฆฌ๋ฅผ ํ์๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
- Scope ๋ด์์ ํด๋น ์ปจํ ์คํธ ๊ฐ์ฒด๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์๋ this ์ง์ ์ฌ์ฉ
- ๋ฐํ ๊ฐ์ ์ปจํ ์คํธ ๊ฐ์ฒด
- ์ฃผ๋ก ๊ฐ์ฒด์ ์ด๊ธฐํํ ๋ ์ฌ์ฉ
also
/** * Calls the specified function [block] with `this` value as its argument and returns `this` value. * * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#also). */ @kotlin.internal.InlineOnly @SinceKotlin("1.1") public inline fun <T> T.also(block: (T) -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block(this) return this }
๋ค์์ also ํจ์๋ฅผ ์ ์ํ๋ ์ฝ๋์ ๋๋ค. also๋ T ์ ํ์ฅํจ์๋ก ์ ์๋์ด ์์ผ๋ฉฐ block ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ํธ์ถํ๊ฒ ๋ฉ๋๋ค. apply์ ๋์ผํ๊ฒ block ํจ์์ ๋ฐํ ๊ฐ์ด ์์ผ๋ฉฐ ์ํ๋ ๋์ ํ ํด๋น ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ฆฌํดํ๋ ํจ์์ ๋๋ค.
val numbers = mutableListOf("one", "two", "three") numbers .also { println("The list elements before adding new one: $it") } .add("four")
also๋ T ์ ํด๋นํ๋ ์ปจํ ์คํธ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ํ๋ ๋์์ ํ๋๋ก ๋ฉ์๋๋ฅผ ์์ฑํฉ๋๋ค. ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ๋ apply ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๊ณ ๊ทธ ์ธ ๋ถ๊ฐ์ ์ธ ์์ ์ also ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ ์์ ์์๋ also ํจ์๋ก ์ํ๋ ๋ฌธ์์ด์ ์ถ๋ ฅ์ ํ ํ ํด๋น ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ฐํํ์ฌ add ํ๋๋ก ์์ฑ๋์ด ์์ต๋๋ค.
์ ๋ฆฌ๋ฅผ ํ์๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
- Scope ๋ด์์ ํด๋น ์ปจํ ์คํธ ๊ฐ์ฒด๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์๋ it ์ด๋ผ๋ ๋งค๊ฐ๋ณ์ ์ฌ์ฉ, ์ปค์คํ ํ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ๋ฐํ ๊ฐ์ ์ปจํ ์คํธ ๊ฐ์ฒด
- ๊ฐ์ฒด์ ์ถ๊ฐ์ ์ธ ์์ ์ ํ ๋ ์ฌ์ฉ
์ ๋ฆฌ
5๊ฐ์ง์ Scope function์ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์์์ ์ธ๊ธํ๋ฏ์ด ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ๋ฐฉ์๊ณผ ๋ฐํ ๊ฐ์ด ๋ค๋ฅด๊ณ ํด๋น ํจ์๊ฐ ํ์ฅํจ์๋ก ์ ์๋๊ฑฐ๋ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ํจ์๋ก ์ ์๋์ด ์๋ค๋ ๊ฒ์ด ํฐ ์ฐจ์ด์ ๋๋ค.
์ฐธ๊ณ
๋ฐ์ํ'Android > Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin] Set ์ฌ์ฉ๋ฒ (0) 2021.08.13 [Kotlin] Map ์ฌ์ฉ๋ฒ (0) 2021.08.12 [Kotlin] List ์ฌ์ฉ๋ฒ (0) 2021.08.12 [Kotlin] String ์ฌ์ฉ๋ฒ (0) 2021.08.12 [Kotlin] Array ์ฌ์ฉ๋ฒ (0) 2021.08.12