Android

[Kotlin] ๋žŒ๋‹ค์‹ / SAM๋ณ€ํ™˜ /ํ™•์žฅํ•จ์ˆ˜

MK_____ 2021. 12. 9. 13:58

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