개발 언어/코틀린
코틀린(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/
728x90