KOTLIN · 함수형
순수 함수와 부수 효과 관리
순수 함수를 작성하고 부수 효과를 격리하는 전략입니다. 비즈니스 로직의 테스트 용이성을 크게 높입니다.
함수형중급pure-functionside-effectfunctional-coretestability
핵심 설명
순수 함수를 작성하고 부수 효과를 격리하는 전략입니다. 비즈니스 로직의 테스트 용이성을 크게 높입니다.
Kotlin code
// 순수 함수: 동일 입력 → 동일 출력, 부수 효과 없음
fun calculateDiscount(price: Int, memberLevel: Int): Int = when {
memberLevel >= 3 -> (price * 0.20).toInt()
memberLevel >= 2 -> (price * 0.10).toInt()
memberLevel >= 1 -> (price * 0.05).toInt()
else -> 0
}
fun calculateTotal(items: List<Pair<String, Int>>, discount: Int): Int =
items.sumOf { it.second } - discount
// 부수 효과를 경계에서 처리
data class OrderResult(val total: Int, val discount: Int, val items: List<String>)
fun processOrder(items: List<Pair<String, Int>>, level: Int): OrderResult {
val subtotal = items.sumOf { it.second }
val discount = calculateDiscount(subtotal, level)
val total = calculateTotal(items, discount)
return OrderResult(total, discount, items.map { it.first })
}
// I/O는 경계에서만
fun main() {
val items = listOf("노트북" to 1500000, "마우스" to 50000)
val result = processOrder(items, memberLevel = 3)
// 부수 효과(출력)는 최외곽에서만
println("주문 결과:")
println(" 항목: ${result.items}")
println(" 할인: ${result.discount}원")
println(" 합계: ${result.total}원")
}학습 팁
비즈니스 로직을 순수 함수로 작성하면 별도의 모킹 없이 입력-출력만으로 테스트할 수 있습니다.
주의할 점
순수 함수 내에서 로깅, DB 접근, 네트워크 호출 등을 하면 더 이상 순수하지 않습니다. 이런 부수 효과는 호출부로 분리하세요.
자주 묻는 질문
순수 함수와 부수 효과 관리란 무엇인가요?
순수 함수를 작성하고 부수 효과를 격리하는 전략입니다. 비즈니스 로직의 테스트 용이성을 크게 높입니다.
순수 함수와 부수 효과 관리 학습 시 주의할 점은 무엇인가요?
순수 함수 내에서 로깅, DB 접근, 네트워크 호출 등을 하면 더 이상 순수하지 않습니다. 이런 부수 효과는 호출부로 분리하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.