-
[AOS] Kotlin ์ค์ฝํ ํจ์ (Scope Function)2023. 4. 28. 10:26๋ฐ์ํ๐ฑ์ค์๋ฆฌ๋, if ๋ฌธ depth๊ฐ ๋๋ฌด ๊น์๋ฐ scope ํจ์๊ฐ์๊ฑฐ๋ก ์ค์ฌ์ฃผ์ธ์~~(ํ, if ๋ฌธ ๊น์ด๋ ๊ณ ๋ คํด์ผํ๋๊ตฌ๋...!) ๋ต ์๊ฒ ์ต๋๋ค!๐ถ
๐ก ํ ๋ฒ ์ฝ๋๋ฆฌ๋ทฐ์์ if ๋ฌธ์ depth๋ฅผ ์ ๊ฒฝ ์จ๋ฌ๋ผ๋ ์ฝ๋ฉํธ๋ฅผ ๋ฐ์ ์ดํ๋ก, if ๋ฌธ์ ์ฌ์ฉํด์ผ ํ ๋๋ง๋ค depth๋ฅผ ์ ์ผ ์ ๊ฒฝ ์ฐ๊ฒ ๋์๋ค.
if ๋ฌธ์ depth๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๊ฒ ์ง๋ง ๋์ ๊ฒฝ์ฐ scope ํจ์๋ฅผ ์ ์ฉํ๋ค.Scope ํจ์
[ ๊ณต์๋ฌธ์ ]
The Kotlin standard library contains several functions whose sole purpose is to execute a block of code within the context of an object. When you call such a function on an object with a lambda expression provided, it forms a temporary scope. In this scope, you can access the object without its name. Such functions are called scope functions. There are five of them: let, run, with, apply, and also.
์ค์ฝํ ํจ์ (Scope Function)๋, ํน์ ๊ฐ์ฒด์ ์ปจํ ์คํธ ์์์ ํน์ ๋์(์์ฑ ์ด๊ธฐํ, ํ์ฉ ๋ฑ)์ ์คํํ๊ธฐ ์ํ ๋ชฉ์ ๋ง์ ๊ฐ์ง ํจ์๋ฅผ ๋งํ๋ค.
์ค์ฝํ ํจ์ ํธ์ถ ์ ๋๋ค(lambda) ํํ์์ ํ์ฑํ๋ฉฐ, ์ด ๋๋ค์ ์์์๋ ๊ฐ์ฒด ์ด๋ฆ ์์ด ๊ฐ์ฒด์ ์์ธ์ค ํ ์ ์๋ค. ์ค์ฝํ ํจ์์ ์ข ๋ฃ์๋ let, run, with, apply, also๊ฐ ์๋ค.
1. let
- it์ ์ฌ์ฉํด ํ๋กํผํฐ์ ์ ๊ทผ
- ์ต์ข ์คํ ๊ฒฐ๊ณผ ๋ฐํ (๋ง์ง๋ง ์ค == ๋ฐํ๊ฐ)
fun main() { val info = Info("์ค์๋ฆฌ", "tistory", 1) val scope = info.let { println("${it.name}๋ผ๋ ์ด๋ฆ์ ${it.blog} ๋ธ๋ก๊ฑฐ") // ์ค์๋ฆฌ๋ผ๋ ์ด๋ฆ์ tistory ๋ธ๋ก๊ฑฐ it.num = 10 it.num } println(scope) // 10 } class Info(var name: String, var blog: String, var num: Int) { fun plus() { num += 1 } }
2. run
- this๋ฅผ ์ฌ์ฉํด ํ๋กํผํฐ์ ์ ๊ทผ (this ์๋ต ๊ฐ๋ฅ)
- return ๊ฐ์ผ๋ก ๊ฐ์ฒด ๋ฐํ
fun main() { val info = Info("์ค์๋ฆฌ", "tistory", 1) val scope = info.run { println("${name}๋ผ๋ ์ด๋ฆ์ ${this.blog} ๋ธ๋ก๊ฑฐ") // ์ค์๋ฆฌ๋ผ๋ ์ด๋ฆ์ tistory ๋ธ๋ก๊ฑฐ this.num = 10 num } println(scope) // 10 } class Info(var name: String, var blog: String, var num: Int) { fun plus() { num += 1 } }
3. with
- this๋ฅผ ์ฌ์ฉํด ํ๋กํผํฐ์ ์ ๊ทผ (์๋ต ๊ฐ๋ฅ)
- return ๊ฐ์ผ๋ก ๊ฐ์ฒด ๋ฐํ
fun main() { val info = Info("์ค์๋ฆฌ", "tistory", 1) val scope = with(info) { println("${name}๋ผ๋ ์ด๋ฆ์ ${this.blog} ๋ธ๋ก๊ฑฐ") // ์ค์๋ฆฌ๋ผ๋ ์ด๋ฆ์ tistory ๋ธ๋ก๊ฑฐ this.num = 10 num } println(scope) // 10 } class Info(var name: String, var blog: String, var num: Int) { fun plus() { num += 1 } }
4. apply
- this๋ฅผ ์ฌ์ฉํด ํ๋กํผํฐ์ ์ ๊ทผ (์๋ต๊ฐ๋ฅ)
- return ๊ฐ์ผ๋ก ์๊ธฐ ์์ ์ ๋ฐํ → ์ด๊ธฐํ ์ ์ฃผ๋ก ์ฌ์ฉ
fun main() { val info = Info("์ค์๋ฆฌ", "tistory", 1) val scope = info.apply { println("${name}๋ผ๋ ์ด๋ฆ์ ${this.blog} ๋ธ๋ก๊ฑฐ") // ์ค์๋ฆฌ๋ผ๋ ์ด๋ฆ์ tistory ๋ธ๋ก๊ฑฐ this.num = 10 num } println(scope) // Info("์ค์๋ฆฌ", "tistory", 10) } class Info(var name: String, var blog: String, var num: Int) { fun plus() { num += 1 } }
5. also
- it์ ์ฌ์ฉํด ํ๋กํผํฐ์ ์ ๊ทผ
- return ๊ฐ์ผ๋ก ์๊ธฐ ์์ ์ ๋ฐํ
fun main() { val info = Info("์ค์๋ฆฌ", "tistory", 1) val scope = info.also { println("${it.name}๋ผ๋ ์ด๋ฆ์ ${it.blog} ๋ธ๋ก๊ฑฐ") // ์ค์๋ฆฌ๋ผ๋ ์ด๋ฆ์ tistory ๋ธ๋ก๊ฑฐ it.num = 10 it.num } println(scope) // Info("์ค์๋ฆฌ", "tistory", 10) } class Info(var name: String, var blog: String, var num: Int) { fun plus() { num += 1 } }
๐ก ์์ฝ
it ์ฌ์ฉ ์ค์ฝํ ํจ์ (๋๋จธ์ง๋ this)
์๊ธฐ ์์ ๋ฆฌํด ์ค์ฝํ ํจ์ (๋๋จธ์ง๋ ๋ง์ง๋ง ์ค ๋ฆฌํด)
๋ฐ์ํ'๐ฐ Android ๐ญ > ๐ ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AOS] Android Screen ON / OFF Detect (0) 2023.06.30 [AOS] Check App Status (Background or Foreground) (0) 2023.06.30 [AOS] ์ด๋ฏธ์ง ๋ฌธ์๋ฉ์์ง ์ ์กํ๊ธฐ (0) 2023.04.14 [AOS] Android DeepLink ์ค์ (0) 2022.11.23 [AOS] ForegroundService (0) 2022.11.15