[Java/Kotlin] Kotlin Lambda ๐Ÿ‘‹

Jayยท2021๋…„ 1์›” 19์ผ
0

Java&Kotlin

๋ชฉ๋ก ๋ณด๊ธฐ
11/30
post-thumbnail

Lamda

  • ์šฐ๋ฆฌ๊ฐ€ Value์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ต๋ช… ํ•จ์ˆ˜์ด๋‹ค.
  1. Method์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ
  2. return์ด ๊ฐ€๋Šฅํ•˜๊ณ 
  3. ๋ณดํ†ต์˜ object์™€ ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Conception

Basic Syntax

val lamdaEx : Type = {argumentList -> codeBody}
fun lamdaFun(args) { codeBody }

๊ธฐ๋ณธ์ ์œผ๋กœ value์ฒ˜๋Ÿผ ์ทจ๊ธ‰์„ ํ•œ๋‹ค.
๋ฆฌํ„ด ํƒ€์ž…์„ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•œ๋‹ค.(๋•Œ์—๋”ฐ๋ผ ํ•˜์ง€ ์•Š์„์ˆ˜๋„ ์žˆ๋‹ค.)
{} ์ค‘๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜/ ์ฝ”๋“œ๋ฐ”๋””๋ฅผ ์ ์–ด์•ผํ•œ๋‹ค.

ํŠน์ง•

  • CodeBody๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
  • ArgumentList๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค.
  • Return Type์€ ์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ถ”๋ก  ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•ญ์ƒ variableํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฉ”์†Œ๋“œ์˜ argument๋กœ ๋„˜๊ฒจ์ค˜๋„ ๋œ๋‹ค.
  • CodeBody์˜ ๋งˆ์ง€๋ง‰ ์ค„์€ return type์œผ๋กœ ์ถ”๋ก ๋œ๋‹ค.

Type ์ถ”๋ก 

์ฝ”ํ‹€๋ฆฐ์€ ํƒ€์ž… ์ถ”๋ก  ์–ธ์–ด์ด๋‹ค.
๋žŒ๋‹ค์‹์—์„œ ์—ญ์‹œ ํƒ€์ž… ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์— ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

val square = {number : Int -> number*number}

val square : Int๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ Int๋กœ ์ง€์ •ํ•˜์˜€๊ธฐ์— return type ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋งŒ์•ฝ,

val square = {number -> number*number}

๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค. โŒ ํƒ€์ž… ์ถ”๋ก ํ•  ์ •๋ณด๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ.

๊ทธ๋Ÿฌ๋‚˜, ์ด๋ ‡๊ฒŒ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค. โญ•๏ธ

val square : Int -> Int = {number ->number*number}

์ค‘๊ด„ํ˜ธ ์•ˆ์— ์–ด๋– ํ•œ ํƒ€์ž…๋„ ์—†์ง€๋งŒ input type -> output type์„ ๋ฏธ๋ฆฌ ๋ช…์‹œํ•˜์˜€์Œ์œผ๋กœ ๋ฌธ์ œ์—†์ด ์‹คํ–‰๋œ๋‹ค.


Extension

  • ํด๋ž˜์Šค ํ™•์žฅ
  • ๊ธฐ์กด ํด๋ž˜์Šค์— ๋“ค์–ด์žˆ๋Š” ๋ฉ”์†Œ๋“œ์™€ ๋”๋ถˆ์–ด ์ปค์Šคํ…€ํ•˜๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ.

ex)

String class -> getLength(), toInt(), compareTo()

val ex : String.() -> String = {
	this + "extend"
}

val a = "kotlin "

println(a.ex)

// kotlin extend๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

this๋Š” ex๊ฐ์ฒด๋ฅผ callํ•˜๋Š” object์ด๋‹ค.
์—ฌ๊ธฐ์„œ this๋Š” a๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. a๋Š” kotlin ์ด๊ณ 
๊ทธ๋ž˜์„œ ๋ฐ˜ํ™˜ ๊ฐ’์€ kotlin extend๊ฐ€ ๋ ๊ฒƒ์ด๋‹ค.

fun exString(args:String, num:Int) : String{
	val another : String.(Int) -> String = {this+it}
    return args.another(num)
}

args+num์ด ๋‹ต์ด ๋  ๊ฒƒ์ด๋‹ค.


SAM(Single Abstract Method)

  • ์ถ”์ƒ ๋ฉ”์†Œ๋“œ์— ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋งŒ ์žˆ๋Š” ๊ฒƒ.
  • ๋žŒ๋‹ค ํ‘œํ˜„์‹์œผ๋กœ SAM์˜ ์ต๋ช…๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ธ์ž๋กœ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค.
button.setOnClickListener(object : OnClickListener{
	override fun onClick(view:View){
    	doSomethin()
    }
})

๋žŒ๋‹ค๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ตฌํ˜„ ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•˜์—ฌ ์ธ์ž๋กœ ๋„˜๊ฒจ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
์ธ์ž์˜ ํƒ€์ž…์€ ์ด๋ฏธ ์ •์˜๋˜์–ด ์žˆ๊ธฐ์—, ํƒ€์ž…์— ๋งž๊ฒŒ ๋žŒ๋‹ค ํ‘œํ˜„์‹๋งŒ ์ž‘์„ฑํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ ์ต๋ช…๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

๋žŒ๋‹ค๋กœ ์ต๋ช…ํด๋ž˜์Šค๋กœ ์ธ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ

fun setOnClickListener(listener : (View) -> Unit)
button.setOnClickListener({view -> doSomething() })

๋˜ํ•œ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ธ์ž์˜ ํƒ€์ž…์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ธฐ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ธ์ž๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

button.setOnClickListener() {doSomething()}
profile
developer

0๊ฐœ์˜ ๋Œ“๊ธ€