1. 람다(Lamda)
fun main() {
println(square(2))
println(square2(2))
println(printNameAndAge("taein", 30))
}
val square : (Int) -> (Int) = { number -> number * number}
val square2 = { number : Int -> number * number}
val printNameAndAge = { name : String, age : Int -> "name : ${name}, age : ${age}" }
출력 결과
square 변수는 (Int) -> (Int) 라는 변수 타입과 반환값 타입을 정의해 주었습니다. square2는 블럭 안에서 변수에 대한 타입만 정의해 주었습니다. printNameAndAge 람다식은 name과 age에 대한 변수 타입을 정의하여 사용 하였습니다. 이처럼 코틀린(kotlin) 에서는 java 8의 함수형 인터페이스, Function, Consumer, BiFunction, BiConsumer 등을 자유롭게 정의하여 사용 할 수 있습니다.
2. 확장 함수 (Extension Function)
fun main() {
println("banana".isGood())
println("taein".introduceMySelf(30))
}
val isGood : String.() -> String = {
"$this is good"
}
val introduceMySelf : String.(Int) -> String = {
"I am $this and $it years old"
}
출력 결과
코틀린의 확장 함수는 기존 클래스의 함수를 확장 할수 있습니다. 위의 isGood, introduceMySelf 확장 함수 모두 String 타입의 확장 함수를 정의한 것 입니다. isGood 확장 함수를 보시면, String.() 과 같이 정의 되었습니다. () 안에는 파라미터를 정의 할수 있습니다. 그리고, -> String 으로 반환값 타입을 정의 하여 주었습니다. introduceMySelf 확장 함수는 Int 타입의 변수를 가질수 있고, String의 반환 타입을 정의 하였습니다. main 함수에서 "taein".introduceMySelf(30) 으로 호출 하는데, "taein"을 수신 객체라고 합니다. introduceMySelf {} 블럭 안에서는 수신 객체는 this로 사용 합니다. it은 파라미터 변수를 의미 합니다.
4. 람다와 when
fun main() {
println(calculateGrade(1000))
}
val calculateGrade : (Int) -> String = {
when(it) {
in 0..40 -> "fail"
in 41..70 -> "pass"
in 71..100 -> "perfect"
else -> "error"
}
}
출력 결과
위와 같이 람다(Lamda) 와 when도 쓰일 수 있습니다. 'when(it)' 여기서 it은 calculateGrade의 Int 타입의 파라미터를 의미 합니다.
6. 람다를 함수의 파라미터로 사용
fun main() {
println(invokeLamda(checkPie))
println(invokeLamda({it == 3.14}))
println(invokeLamda{it == 3.14})
}
val checkPie : (Double) -> (Boolean) = { number ->
number == 3.14
}
fun invokeLamda(lamda : (Double) -> Boolean) : Boolean {
return lamda(3.14)
}
출력 결과
invokeLamda 라는 함수를 정의 하여, 람다식을 파라미터로 받을 수 있습니다. invokeLamda 라는 함수는 (Double) 형 클래스의 (Boolean) 형 반환값을 갖는 람다를 파라미터로 받을 수 있습니다. main 함수를 보시면, {it == 3.14}와 그 자리에서 람다식을 표현 할수 있습니다. 만약, 람다식 파라미터가 1개 존재 한다면, {it == 3.14} 에서 중괄호('{', '}')를 생략 할 수 있습니다.
'코틀린' 카테고리의 다른 글
코틀린 6편 (lateinit) (0) | 2020.11.13 |
---|---|
코틀린 5편 (data class, object, companion object) (0) | 2020.11.11 |
코틀린 3편 (클래스 생성자와 상속) (0) | 2020.11.10 |
코틀린 2편 (0) | 2020.11.10 |
코틀린 1편 (0) | 2020.09.16 |