Kotlin

코틀린 함수

Jyuni 2023. 2. 13. 22:18

함수형 프로그래밍

  • 함수가 일급 객체로써 재사용성을 높인 프로그래밍 패러다임
    • 일급 객체 : 변수나 데이터에 할당할 수 있고 리턴값으로 사용 가능하며 객체를 인자로 넘길 수 있어야 함
방식 의미 ex
절차 지향 프로그래밍 순서대로 동작하는 방식 C
객체 지향 프로그래밍 클래스가 최우선이 되는 방식 Java, C++
함수형 프로그래밍 함수의 동작이 최우선이 되는 방식 Kotlin, Javascript

장점

  • 코드를 간결하게 구현할 수 있고 가독성을 높일 수 있음
  • 동시성 작업을 쉽게 구현할 수 있음

람다 함수

람다 함수는 익명 함수를 의미

람다 규칙

  • 람다 함수는 중괄호{}로 표현
  • -> 기준으로 왼쪽은 매개변수, 오른쪽은 함수 내용으로 작성
  • 매개변수 타입을 추론할 수 있으면 생략 가능
  • 함수의 마지막 표현식은 반환 값
  • 매개변수가 하나일 경우에는 생략 가능
  • 아래와 같이 일반 함수 sum1을 람다 함수인 sum2로 변경 가능
fun main() {
    println(sum1(1, 2)) // 3
    println(sum2(10, 20)) // 30
}

fun sum1(num1: Int, num2: Int): Int {
    return num1 + num2
}

val sum2 = {num1: Int, num2: Int -> num1 + num2}
  • 표현식이 2줄 이상일 경우 마지막 표현식이 반환됨
fun main() {
    println(sum2(10, 20)) // num1 + num2 = 30
}

val sum2 = {num1: Int, num2: Int ->
    print("num1 + num2 = ")
    num1 + num2
}

람다 생략

val sum1: (Int, Int) -> Int = {num1: Int, num2: Int -> num1 + num2 } // 전체 표현
val sum2 = {num1: Int, num2: Int -> num1 + num2} // 선언 자료형 생략
val sum3: (Int, Int) -> Int = {num1, num2 -> num1 + num2} // 매개변수 자료형 생략
val sum4 = {num1, num2 -> num1 + num2} // 자료형 추론이 불가능하여 에러 발생