0Pricing
Kotlin Academy · 강의

각 방법을 사용하는 시점

장단점 비교

각 방법을 사용하는 시점은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 중위 함수
  2. DSL과 유사한 API 만들기
  3. tailrec 함수
  4. 각 방법을 사용하는 시점
← Kotlin Academy(으)로 돌아가기