각 방법을 사용하는 시점
장단점 비교
각 방법을 사용하는 시점은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
서로 다른 역할을 하는 두 도구
중위 함수는 가독성을 위한 것이고, 꼬리 재귀 함수는 안전하고 효율적인 재귀를 위한 것입니다. 둘은 서로 관련 없는 문제를 해결합니다.
infix fun Int.add(o: Int) = this + o
tailrec fun sum(n: Int, acc: Int = 0): Int =
if (n == 0) acc else sum(n - 1, acc + n)
fun main() {
println(2 add 3)
println(sum(10))
}유창한 API에는 중위 함수 선택하기
점과 괄호 없이 호출하는 편이 더 읽기 좋을 때, 특히 DSL이나 쌍을 만들 때 중위 함수를 사용하세요.
fun main() {
val pair = "id" to 100
println(pair)
}깊은 재귀에는 tailrec 선택하기
재귀 알고리즘이 스택을 넘칠 정도로 깊게 재귀할 수 있다면 tailrec을 사용하세요.
tailrec fun count(n: Int, acc: Int = 0): Int =
if (n == 0) acc else count(n - 1, acc + 1)
fun main() {
println(count(50000))
}중위 함수의 절충점
중위 함수는 구두점을 없애지만, 익숙하지 않은 독자에게는 명확성을 떨어뜨리고 우선순위를 복잡하게 만들 수 있습니다. 분명하게 도움이 될 때만 사용하세요.
infix fun Int.scaledBy(f: Int) = this * f
fun main() {
println(5 scaledBy 3)
}tailrec의 절충점
코드를 꼬리 재귀로 만들려면 흔히 Accumulator가 필요하므로 일반 반복문보다 덜 직접적으로 느껴질 수 있습니다. 표현력과 단순성 사이의 균형을 고려하세요.
tailrec fun product(n: Int, acc: Long = 1): Long =
if (n <= 1) acc else product(n - 1, acc * n)
fun main() {
println(product(6))
}반복문이 더 단순한 경우
일반 for 또는 while 반복문이 꼬리 재귀보다 명확하다면 반복문을 우선하세요. 재귀는 필수가 아니라 도구입니다.
fun sumLoop(n: Int): Int {
var total = 0
for (i in 1..n) total += i
return total
}
fun main() {
println(sumLoop(10))
}이름이 있는 호출이 더 명확한 경우
중위 함수의 이름이 명확한 이항 관계를 나타내지 않는다면 일반 메서드 호출이 의도를 더 잘 전달합니다.
data class Temp(val c: Int) {
fun isWarmerThan(o: Temp) = c > o.c
}
fun main() {
println(Temp(30).isWarmerThan(Temp(20)))
}둘을 결합하기
두 기능은 서로 독립적이므로 하나의 프로그램에서 읽기 쉬운 호출에는 중위 함수를, 안전한 재귀에는 tailrec을 사용할 수 있습니다.
infix fun Int.upto(n: Int) = (this..n).toList()
tailrec fun last(list: List<Int>): Int =
if (list.size == 1) list[0] else last(list.drop(1))
fun main() {
println(last(1 upto 5))
}가독성 점검 목록
다음과 같이 자문해 보세요. 중위 함수가 초보자에게 호출을 더 명확하게 보여 주나요? tailrec이 실제 오버플로 위험을 방지하나요? 그렇지 않다면 일반 함수와 반복문을 우선하세요.
fun main() {
val r = (1..5).sum()
println(r)
}성능 참고 사항
tailrec은 일정한 스택 공간에서 반복문과 같은 성능을 제공합니다. 중위 함수에는 실행 시간 비용이 없으며 순전히 문법적인 기능입니다.
tailrec fun pow(base: Int, exp: Int, acc: Long = 1): Long =
if (exp == 0) acc else pow(base, exp - 1, acc * base)
fun main() {
println(pow(2, 10))
}선택 요약
중위 함수: 유창한 한 인수 이항 연산 형태의 호출입니다. Tailrec: 안전하게 확장되어야 하는 재귀입니다. 어느 쪽도 기본 선택이 아니며, 둘 다 의도적으로 선택해야 합니다.
infix fun String.joinWith(o: String) = "$this-$o"
fun main() {
println("a" joinWith "b")
}빠른 확인
각 기능을 언제 사용해야 하는지에 대한 이해도를 확인해 보세요.
복습
각 기능을 언제 사용하는지 배웠습니다:
- 유창하고 읽기 쉬운 이항 연산 형태의 호출과 DSL에는
infix를 사용하세요. - 스택 오버플로 없이 확장되어야 하는 재귀에는
tailrec을 사용하세요. - 일반 반복문이나 이름이 있는 함수가 더 명확하다면 이를 우선하세요.
- 두 기능은 독립적이며 함께 사용할 수 있습니다.
infix fun Int.by(o: Int) = this * o
tailrec fun dec(n: Int): Int = if (n == 0) 0 else dec(n - 1)
fun main() {
println(3 by 4)
println(dec(1000))
}자주 묻는 질문
“각 방법을 사용하는 시점” 강의는 무료인가요?
네 — “각 방법을 사용하는 시점” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“각 방법을 사용하는 시점”에서 뭘 배우나요?
장단점 비교 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“각 방법을 사용하는 시점” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 중위 함수
- DSL과 유사한 API 만들기
- tailrec 함수
- 각 방법을 사용하는 시점