코틀린(Kotlin) 함수 -3-

Overview

오늘은 변수에 이어 함수에 대해서 알아보겠습니다. 함수에서는 코틀린에서의 함수구조, 그리고 코틀린 만의 특별한 기법들을 소개하겠습니다. 개인적으로 학습을 하면서 코틀린은 간결하게 표현을 할 수 있겠구나를 많이 느꼈습니다. 어떤 점에서 느꼈는지 제가 잘 전달 할 수 있으면 좋겠지만, 일단 같이 살펴보죠!
이 글은 “Do it! 코틀린 프로그래밍”을 읽으면서 작성되었습니다.

1. 함수의 구조
2. 고차함수와 람다식
3. 마치며


함수의 구조

덧셈 함수를 간단하게 표현하여 코틀린이 얼마나 함수를 간결하게 표현할 수 있는지 우선 살펴보겠습니다.

  fun sum(a: Int, b:Int): Int{
    return a+b
  }


코틀린에서는 fun 함수이름([변수 이름: 자료형, 변수 이름: 자료형 ..]):[반환값의 자료형]{ 표현식… }으로 함수를 표현합니다.
만약 위의 식과 같이 코드가 한줄이라면 중괄호와 return문을 생략할 수 있습니다. 그러면 아래와 같이 더 간결해질 수 있습니다.

  fun sum(a: Int, b:Int): Int = a+b


여기서 더 간결해질 수 있습니다. 자료형이 인자와 같기 때문에 자료형까지 생략이 가능합니다. 간단한 API를 구현할 때 코틀린을 이용하면 아주 간결하게 표현이 가능힙니다.

  fun sum(a: Int, b:Int) = a+b

고차함수와 람다식

이번에는 람다식을 소개하겠습니다. 람다식은 수학에서 말하는 람다대수에서 유래하여 이름이 없는 함수로 2개 이상의 입력을 1개의 출력으로 단수화 한다는 개념에서 유래한 것으로 다음과 같은 형태입니다.

  { x, y -> x + y }


람다식을 이용하면 다음과 같은 함수 구현이 가능합니다.

  fun main() {
    println(highFunc({x, y -> x + y}, 10 ,20)) //람다식을 인자로 넘김
  }

  fun highFunc(sum: (Int, Int) -> Int, a: Int, b: Int): Int = sum(a,b)// 매개함수 sum을 리턴하는 함수


위 함수 중 highFunc을 살펴보면, sum이라는 인자가 람다식 꼴로 되어 있습니다. 이렇게 되면 매개변수로 함수를 받아 사용할 수 있습니다.이런 함수를 고차함수라고 합니다. 즉 함수를 매개변수로 하거나 리턴을 하는 함수를 고차함수라고 합니다. 함수를 매개변수로 받을 수 있으니, 사칙연산을 구현하더라도 같은 꼴로 구현을 할 수 있습니다. 이렇게 되면 여러표현을 더 간결하게 표현할 수 있습니다.


마치며

코틀린의 함수 표현을 간단하게 살표보았는데, 아주 간결하게 표현가능할 수 있는 것을 확인하였습니다. 이외에도 익명함수, 인라인 함수, 확장함수, 중위 함수 등이 있는데 코틀린은 다양한 방법으로 간결하게 구현할 수 있습니다. 이는 강력한 코틀린의 장점이라고 생각합니다.

//확장 함수
fun String.getLongString(target: String): String = if(this.length > target.length) this else target

  println("Hello, World".getLongString("Kotlin")) //확장 함수 사용

//중위 함수
infix fun Int,multiply(x:Int): Int = this * x

  val multi = 3 multiply 10  //중위 함수 사용