추상 메서드 하나를 인수로 사용할 때만 대신 함수 인수 전달
testBtn.setOnClickListener {
view -> testBtn.setBackgroundColor(Color.BLACK)
}
testBtn.setOnClickListener {
_ -> testBtn.setBackgroundColor(Color.RED) //인수를 참조하지 않을 경우 _ 또는 생략
testBtn.setOnClickListener {
testBtn.setBackgroundColor(Color.RED)
}
testBtn.setOnClickListener {
it.visiblity = View.INVISIBLE //람다식의 인수가 하나인 경우는 it(view)로 접근
}
Kotlin에서 SAM 변환 사용
testBtn.setOnTouchListener { //타입을 지정해주지 않아도 타입을 알 수 있음
v, event ->
testBtn.setBackgroundColor(Color.RED)
false
}
Function Type
함수 타입의 변수 선언
함수 타입 변수에서는 리턴을 쓰지 않고, 마지막 줄이 반환된다.
형식
val functionType1 : () -> Unit
val functionType2 : (Int) -> Unit
val functionType3 : (Int, String) -> String
functionType1 = {println("widae")}
functionType2 = {age -> println("나이는 $age") }
functionType3 = {age, name ->
println("나이:$age, 이름:$name")
"나이:$age, 이름:$name"
}
functionType1()
functionType2(20)
println(functionType3(20, "widae"))
High-Order Function
함수의 인수로 함수나 람다식을 받거나 반환할 수 있는 함수
//인수
fun highOrderFunction1(func:() -> Unit) {
func()
}
//반환
fun highOrderFunction2():()->Unit{
return { println("유투브 흙수저 개발자 이야기")}
}
//인수 및 반환
func highOrderFunction3(func:() -> Unit):() -> Unit{
return func
}
highOrderFunction1({println("hello")})
highOrderFunction2()()
highOrderFunction{ println("world")}
확장 함수(Extension Function)
클래스 밖에서 정의된 클래스의 멤버 함수
기존 방식은 상속을 통해 새로운 클래스를 만들고, 함수 추가
fun String.removeFirstLastChar():String = // String = Receiver type
this.substring(1, this.length - 1 )
"HelloWorld".removeFirstLastChar()
코드 실습
func calculate(x:Int, y:Int, func1:(Int, Int)->Int):Int {
return func1(x, y)
}
fun String.removeFirstLastChar():String = this.substring(1, this.length-1)
func main(){
calculate(10,20, {x,y->x+y})//람다 함수로 전달. 람다함수가 하나밖에 없으면 아래처럼 쓸 수 있음
calculate(10,20){x, y -> x+y}
println(calculate(10,20){x,y->x+y})
println(calculate(10,20){x,y->if(x>y)x else y} //x가 y보다 크면 x를 반환하고, 그렇지 않으면 y 반환
println("HelloWorld".removeFirstLastChar()) // 첫, 끝 문자를 제외한 문자열을 반환함. "elloWorl"
}
'Kotlin > 강의' 카테고리의 다른 글
[Kotlin]람다 함수(Lambda) (0) | 2020.03.30 |
---|---|
[Kotlin]꼬리 재귀 함수(Tail Recursive Function) (0) | 2020.03.30 |
댓글