[Kotlin] ๋๋ค์ / SAM๋ณํ /ํ์ฅํจ์
Lambda๋๋ค์(์๋ฐ8 ๋๋ค์ ์ง์)
//๋ฉ์๋๊ฐ ํ๋์ธ ์ธํฐํ์ด์ค๋ SAM(Single Abstract Method)๋ณํ ๊ฐ๋ฅ
button.setOnClickListener(object : View.OnClickListener{
override fun onClick(p0: View?) {
// ํด๋ฆญ ์ด๋ฒคํธ
}
})
//SAM๋ณํ
button.setOnClickListener {
// ํด๋ฆญ ์ด๋ฒคํธ
}
SAM(Single Abstract Method) ๋ณํ
//๊ธฐ๋ณธ
fun sum(x: Int, y: Int): Int {
return x + y
}
//{}์๋ต, return์๋ต
fun sum(x: Int, y: Int) = x + y
//๋ณ์๋ฅผ ํจ์์ฒ๋ผ ์ฌ์ฉ
var add = { x: Int, y: Int -> x + y }
println(add(5, 15)) // ์ถ๋ ฅ ๊ฐ: 20
์ฝํ๋ฆฐ์์๋ ์ถ์ ๋ฉ์๋ ํ๋๋ฅผ ์ธ์๋ก ์ฌ์ฉํ ๋๋ ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ฉด ํธํ๋ค.
์๋ฐ๋ก ์์ฑ๋ ๋ฉ์๋๊ฐ ํ๋์ธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋๋ ๋์ ํจ์๋ฅผ ์์ฑํ ์ ์๋๋ฐ ์ด๋ฅผ SAM๋ณํ์ด๋ผ๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด ์๋๋ก์ด๋์์ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๊ตฌํํ ๋ onClick() ์ถ์ ๋ฉ์๋๋ง์ ๊ฐ์ง๋ view.OnClickListener ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
button.setOnClickListener(object : View.OnClickLister) {
override fun onClick(v: View?){
//ํด๋ฆญ ์ ์ฒ๋ฆฌ
}
}}
์ฌ๊ธฐ์ View.OnClickLister ์ธํฐํ์ด์ค์๋ onClick() ์ถ์๋ฉ์๋๊ฐ ํ๋ ์๊ธฐ ๋๋ฌธ์ onClick() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๊ณ ์๋ค.
button.setOnClickListener({ v: View? ->
//ํด๋ฆญ ์ ์ฒ๋ฆฌ
})
๊ตฌํํ๋ ์ธํฐํ์ด์ค์ ๊ตฌํํด์ผ ํ ๋ฉ์๋๊ฐ ํ๋๋ฟ์ผ ๋ ์ด๋ฅผ ๋๋ค์์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ค์ ์ฝ๋๋ ๋๋ค์์ผ๋ก ๋ณ๊ฒฝ๋์ด ์ฝ๋๊ฐ ์ค์์ง๋ง ๊ดํธ๋ ์ค์ฒฉ๋์ด ์๊ณ ๊ธฐํธ๋ ๋ง๊ณ ๋ญ๊ฐ ์ฝ๋๋ ๋ณต์กํด๋ณด์ธ๋ค.
button.setOnClickListener() { v: View? ->
//ํด๋ฆญ ์ ์ฒ๋ฆฌ
}
๋ฉ์๋ ํธ์ถ ์ ๋งจ ๋ค์ ์ ๋ฌ๋๋ ์ธ์๊ฐ ๋๋ค์์ธ ๊ฒฝ์ฐ์๋ ๋๋ค์์ ๊ดํธ ๋ฐ์ผ๋ก ๋บ ์ ์๋ค.
button.setOnClickListener { v: View? ->
//ํด๋ฆญ ์ ์ฒ๋ฆฌ
}
๋ํ ๋๋ค๊ฐ ์ด๋ค ๋ฉ์๋์ ์ ์ผํ ์ธ์์ธ ๊ฒฐ์ฐ์๋ ๋ฉ์๋์ ๊ดํธ๋ฅผ ์๋ตํ ์ ์๋ค.
button.setOnClickListener() { v ->
//ํด๋ฆญ ์ ์ฒ๋ฆฌ
}
์ปดํ์ผ๋ฌ๊ฐ ์๋ฃํ์ ์ถ๋ก ํ๋ ๊ฒฝ์ฐ์๋ ์๋ฃํ์ ์๋ตํ ์ ์๋ค.
button.setOnClickListener() { _ ->
//ํด๋ฆญ ์ ์ฒ๋ฆฌ
}
๋ง์ฝ ํด๋ฆญ ์ ์ฒ๋ฆฌ์ v์ธ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด v๋ผ๋ ์ด๋ฆ์ _ ๊ธฐํธ๋ก ๋์นํ ์ ์๋ค.
button.setOnClickListener() {
it.visibility = View.GONE
}
๋๋ค์์์ ์ธ์๊ฐ ํ๋์ธ ๊ฒฝ์ฐ์๋ ์ด๋ฅผ ์๋ตํ๊ณ ๋๋ค ๋ธ๋ก ๋ด์์ ์ธ์๋ฅผ it๋ก ์ ๊ทผํ ์ ์๋ค.
ํ์ฅ ํจ์(๊ธฐ์กดํด๋์ค์ ๊ธฐ๋ฅ์ถ๊ฐ)
- class์ด๋ฆ์ . ์ ์ฐ๊ณ ํจ์ ์ด๋ฆ์ ์์ฑํ์ฌ ์ถ๊ฐ
//Intํด๋์ค์ ๊ธฐ๋ฅ์ถ๊ฐ. this๋ก ์ ๊ทผ๊ฐ๋ฅ
fun Int.isEven() = this % 2 == 0
val a = 10
val b = 11
println(a.isEven()) // true
println(b.isEven()) // flase