확장함수, 중위함수, 꼬리재귀함수 코틀린에선 모두 무료로 제공합니다.
자바나 코틀린에서 지원하는 내장 클래스에는 다양한 함수가 있습니다.
예를 들어 "hello kotlin".toUpperCase()
라는 코드를 보면 앞의 문자열을 대문자로 변환하는 아주 간단한 코드입니다.
여기서 toUpperCase()
라는 함수는 String 클래스에서 기본적으로 제공하는 메소드죠.
그러나 여기서 자신이 직접 구현한 메소드를 추가하고 싶다면 어떻게 해야 할까요??
코틀린에선 확장함수라는 이름으로 이러한 기능을 지원합니다.
예를 들어 이런식으로 사용이 가능합니다.
fun String.toConversion(): String {
var s = ""
this.indices.forEach {
s += if (it % 2 == 0) this[it].uppercase() else this[it].lowercase()
}
return s
}
println("Hello Kotlin".toConversion())
>> HeLlO KoTlIn
위의 함수는 주어진 문자열의 짝수는 대문자 홀수는 소문자로 변환 해주는 String 클래스의 확장함수 입니다.
중위 표현법은 변수와 변수사이에 함수를 넣어 연산자 처럼 사용하는 것 입니다.
코틀린에서는 메소드 앞에 infix
키워드를 붙혀 사용할 수 있습니다.
예를 들면
infix fun Int.add(x: Int) = this + x
println("result: ${1 add 2}")
>> result: 3
위와 같은 식으로 자기 자신에 인자로 받은 x를 더해 리턴 할 수 있습니다.
코틀린에서 꼬리재귀함수 구현은 메소드에 tailrec
키워드를 붙이면 컴파일러가 꼬리재귀를 루프를 이용한 코드로 변경해 줍니다.
tailrec fun recursive(x: Int, y: Int): Int {
return if (x % 2 == 0) y else recursive(x+1, y+1)
}
println(recursive(1,2))
>> result: 3
위와 같이 recursive()
메소드를 사용해서 재귀함수를 구현할 수 있습니다.