개발 언어/코틀린

코틀린(Kotlin) | 함수

jjiiiinn 2019. 6. 24. 20:50
728x90

함수 선언

  • fun키워드를 이용해 선언한다.
fun printAll(list: List<*>) {
    for (e in list) {
        println(e)
    }
}

기본 인자

  • 함수의 파라미터는 기본 인자를 가질수 있으며 생략시 기본인자를 가진다. (오버로딩을 줄일수 있음)
fun join(list: List<String>, join: String = "_"): String {
    return list.joinToString(join)
}

fun main() {
    println(join(listOf("park", "jin"))) // park_jin
    println(join(listOf("park", "jin"), "~")) // park~jin
}
  • 기본 인자를 갖는 메서드를 오버라이드 할때는 기본인자를 생략해 주어야만 한다.
open class Parent {
    open fun printName(name: String = "no name") {
        
    }
}

class Child: Parent() {
    override fun printName(name: String = "child name") { // error
        
    }
}

이름 인자

  • 파라미터 함수를 호출시 파라미터에 이름을 붙일 수 있다.
fun join(list: List<String>, join: String): String {
    return list.joinToString(join)
}

fun main() {
    println(join(list = listOf("park", "jin"), join = ","))
}

가변 인자

  • vararg키워드로 가변인자를 사용할 수 있다.
fun <T: CharSequence> joinWithComma(vararg list: T): String {
    return list.joinToString(",")
}

fun main() {
    val join = joinWithComma("park", "jin")
    println(join) // park,jin
}

중위 함수

  • 다음을 만족한다면 중위 표현을 사용하여 함수를 호출할 수 있다.
    • 멤버함수이거나 확장 함수일때
    • 파라미터를 하나만 가질때
    • infix키워드를 가질때
infix fun String.concat(target: String) = this + target

fun main() {
    // "hello".concat("kotlin")
    val hello = "hello" concat "kotlin"
    println(hello)
}

inline / noinline 함수

  • 고차 함수를 사용하면 각 함수는 객체이고 클로져를 가지고있어 런타임시 페널티가 존재한다.
  • inline키워드를 사용하면 함수 구현 자체를 코드 내부에 넣어 오버헤드를 줄일수 있다.
// fun calculator(a: Int, b: Int, func: (a: Int, b: Int) -> Int) = func(a, b)
inline fun calculator(a: Int, b: Int, func: (a: Int, b: Int) -> Int) = func(a, b)

fun main() {
    println(calculator(1, 2) { a, b -> a + b }) // 1 + 2 = 3
    println(calculator(1, 2) { a, b -> a * b }) // 1 * 2 = 2
    // ...
}
  • 람다가 2개 이상이고 이중 일부는 inline으로 사용하고 싶지 않은 경우 noinline을 사용한다.
inline fun calculator(funcA: (a: Int, b: Int) -> Int, noinline funcB: (Int) -> Int) = funcB(funcA(1, 2))

 


출처

https://moka.land/kotlin/kotlin-inline-fun/

 

Kotlin - inline function

Kotlin 의 inline function 에 대해서 자세히 알아봅니다.

moka.land

http://blog.naver.com/PostView.nhn?blogId=yuyyulee&logNo=221389623237&categoryNo=22&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=search

 

[Kotlin 강좌] 22. 인라인 함수 (Inline Functions)

람다의 패널티고차 함수에 람다를 사용할 경우 런타임 시 특정 패널티가 발생한다, 라는 문구로 코틀린의 '...

blog.naver.com

 

728x90