KOTLIN · 함수
메모이제이션 (Memoization)
함수 호출 결과를 캐싱하여 동일 입력에 대한 재계산을 방지합니다. 순수 함수에 적합한 최적화 기법입니다.
함수고급memoizationcachingpure-functionoptimization
핵심 설명
함수 호출 결과를 캐싱하여 동일 입력에 대한 재계산을 방지합니다. 순수 함수에 적합한 최적화 기법입니다.
Kotlin code
fun <T, R> memoize(fn: (T) -> R): (T) -> R {
val cache = mutableMapOf<T, R>()
return { input ->
cache.getOrPut(input) { fn(input) }
}
}
// 비용이 큰 연산 시뮬레이션
fun expensiveCompute(n: Int): Long {
println(" 계산 중: $n")
Thread.sleep(100) // 시뮬레이션
return (1..n.toLong()).fold(1L) { acc, i -> acc * i }
}
fun main() {
val memoizedFactorial = memoize(::expensiveCompute)
println("첫 호출:")
println(memoizedFactorial(10)) // 계산 실행
println("두번째 호출:")
println(memoizedFactorial(10)) // 캐시에서 반환
// 피보나치에도 적용 가능
lateinit var fib: (Int) -> Long
fib = memoize { n: Int ->
if (n <= 1) n.toLong() else fib(n - 1) + fib(n - 2)
}
println(fib(40)) // 빠르게 계산
}학습 팁
메모이제이션은 순수 함수(동일 입력에 항상 같은 출력)에만 사용하세요. 부수 효과가 있는 함수에는 적합하지 않습니다.
주의할 점
메모이제이션 캐시는 메모리를 계속 소비합니다. 입력 범위가 넓거나 무한한 경우 LRU 캐시를 사용하세요.
자주 묻는 질문
메모이제이션 (Memoization)란 무엇인가요?
함수 호출 결과를 캐싱하여 동일 입력에 대한 재계산을 방지합니다. 순수 함수에 적합한 최적화 기법입니다.
메모이제이션 (Memoization) 학습 시 주의할 점은 무엇인가요?
메모이제이션 캐시는 메모리를 계속 소비합니다. 입력 범위가 넓거나 무한한 경우 LRU 캐시를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.