본문 바로가기
Kotlin

Kotlin8. 람다식 , 고차함수

by 히예네 2023. 8. 1.
728x90
반응형

1. 람다식

함수는 값처럼 사용될 수 있다. 특히 함수의 파라미터에 함수를 값처럼 넣을수도있음.

이런 경우때문에, 함수를 그 자리에서 값으로서 정의하고 이용할 수 있는 방법이 필요해졌다.

그 방법이 람다식이다.

 

fun main() {
  val price = 12500
  val price2 = calc(price,10) 
  val price3 = calc(price,20)
  println("price2 : $price2 , price3 : $price3 ")
}

val calc = {p :Int, r:Int -> (p*(100.0+r)/100.0).toInt()}

람다식이란?? 

(1) { } 안에 파라미터와 식을 -> 기호로 연결해준다. 

=> 준비한 파라미터를 사용한 식을 실행결과로 토해내는 함수를 만든것이다. 

(2) 실행하는 식에는 return이 필요하지 않다. 그냥 실행식이 결과값이 된다.

=> 기본적으로 람다식이라는 것은 식을 「실행하는 함수」이다.  

 

※ 기본적으로 Kotlin 람다식의 파라미터에는 디폴트값을 넣을 수 없다. error

실제 식은..? 

val calc : (p : Int, r : Int) -> Int = {
    p : Int, r : Int -> (p*(100.0+r)/100.0).toInt() 
}

그런데 저 람다식을 좀 더 간결하게 줄일 수 있다. equal를 이용하자  

(이래서 사람들이 코틀린 해석을 어려워한다. 다 줄여둠 .. 자바를 꼼꼼하게 공부해야한다.) 

 

fun calc(p : Int, r : Int) = (p*(100.0+r)/100.0).toInt()

fun calc(p : Int, r : Int) 은 함수 선언 부분이다.  그리고 실행식을 =으로 대입한다. 

함수를 호출하면 식이 실행되고, 결과를 토해내는 함수가 된다. ( return을 지정할 필요가 없다)

 

val calc = {p :Int, r:Int -> (p*(100.0+r)/100.0).toInt()}

이 형식이라도 제대로 기억하자

 

2. 고차함수

람다식이 가장 많이 쓰이는 이유는 파라미터와 리턴값때문이다. 

파라미터리턴값에 함수를 값으로서 사용하는 함수이다! 이걸 고차함수라부른다. 

fun main() {
 	val price = 12500
    calc(price, { n -> n * 1.1 })
    calc(price, { n -> n / 1.1 })
}

fun calc(p:Int, f:(p:Int)->Double){
    val re = (f(p)).toInt()
    println("* $p -> $re")
}
//output
* 12500 -> 13750
* 12500 -> 11363

일단 fun calc의 파라미터를 보자

파라미터1 --- p : Int  (Int형 값)

파라미터2 --- f : ( p : Int) - > Double ( 인트형 파라미터 1개를 갖고, 더블형을 토해내는 함수) 

 

그리고 calc(price, { n-> n*1.1})에서 함수자체가 파라미터값으로 들어갔다.

즉 Int를 받아서 1.1배해서 더블형으로 토해내라는뜻이다. 

 

 

자주쓰는표현! 람다식에서 파라미터를 밖으로 뺄수있다. 

 calc(price, { n -> n / 1.1 })
 을
 
 calc(price) { n->
 	n * 1.1
 }
 로 바꿀수있다.

 

 

 

 

728x90
반응형

'Kotlin' 카테고리의 다른 글

Kotlin10. class와 OOP  (0) 2023.08.06
Kotlin9. 재귀함수, 꼬리재귀  (0) 2023.08.01
Kotlin7. 함수  (0) 2023.07.31
Kotlin6. 컬렉션  (0) 2023.07.31
Kotlin5. 제어구문 if(표현식), when 등등... 분기(分岐)란?  (0) 2023.07.30