학습
Scala 콜백 함수 (Higher-Order Functions)
Scala 콜백 함수 (Higher-Order Functions) — 초급
콜백 함수 (Higher-Order Functions)
1. 도입 (왜 배워야 하는가)
콜백 함수는 프로그래밍에서 매우 중요한 개념으로, 특히 Scala와 같은 함수형 프로그래밍 언어에서 그 활용도가 높습니다. 실무에서는 비동기 처리, 이벤트 핸들러, 데이터 변환 등 다양한 상황에서 콜백 함수를 사용합니다. 만약 이 개념을 이해하지 못한다면, 복잡한 로직을 구현하는 데 어려움을 겪거나, 코드의 재사용성을 떨어뜨릴 수 있습니다. 결과적으로 팀과의 협업에서 비효율성을 초래하고, 유지보수 또한 어렵게 만들 수 있습니다.
2. 핵심 개념 설명
콜백 함수는 다른 함수의 인자로 전달되어 실행되는 함수를 의미합니다. 쉽게 말해, 여러분이 친구에게 집에 있는 물건을 빌려달라고 요청했을 때, 친구가 나중에 그 물건을 가져다주는 상황을 떠올릴 수 있습니다. 여기서 친구가 여러분이 요청한 물건을 "가져다주는" 역할이 콜백 함수입니다.
관련 용어 정리
| 용어 | 설명 |
|---|---|
| 고차 함수 | 함수를 인자로 받거나 함수를 반환하는 함수 |
| 순수 함수 | 부작용이 없는 함수 |
| 비동기 처리 | 다른 작업을 기다리지 않고 동시에 실행하는 방식 |
3. 기본 코드 예제
아래는 콜백 함수를 사용하는 기본적인 코드 예제입니다.
def processNumbers(numbers: List[Int], callback: Int => Int): List[Int] = {
numbers.map(callback) // numbers 리스트의 각 요소에 callback 함수를 적용
}
val numbers = List(1, 2, 3, 4, 5)
val doubled = processNumbers(numbers, (x: Int) => x * 2) // 각 숫자를 2배로 만드는 콜백 함수
// 실행 결과: List(2, 4, 6, 8, 10)
println(doubled)
processNumbers함수는 두 개의 매개변수를 받습니다: 정수 리스트와 콜백 함수.numbers.map(callback)은 리스트의 각 요소에 콜백 함수를 적용합니다.doubled변수는processNumbers호출 결과로, 각 숫자가 2배로 증가한 리스트입니다.- 마지막으로
println(doubled)을 통해 결과를 출력합니다.
4. 실전 활용 예제
예제 1: 쇼핑몰에서 장바구니를 구현할 때
장바구니에 담긴 상품의 가격을 할인하는 기능을 구현할 수 있습니다.
def applyDiscount(prices: List[Double], discount: Double => Double): List[Double] = {
prices.map(discount)
}
val prices = List(100.0, 200.0, 300.0)
val discountedPrices = applyDiscount(prices, (price: Double) => price * 0.9) // 10% 할인
// 실행 결과: List(90.0, 180.0, 270.0)
println(discountedPrices)
예제 2: 이벤트 처리
버튼 클릭 이벤트를 처리하는 예제입니다.
def onClick(eventHandler: () => Unit): Unit = {
println("버튼이 클릭되었습니다.")
eventHandler() // 클릭 시 실행할 함수를 호출
}
onClick(() => println("이벤트 핸들러가 실행되었습니다.")) // 이벤트 핸들러 전달
// 실행 결과:
// 버튼이 클릭되었습니다.
// 이벤트 핸들러가 실행되었습니다.
5. 흔한 실수와 주의사항
실수 1: 콜백 함수에 잘못된 인자를 전달
// 잘못된 예
val wrongUsage = processNumbers(numbers, (x: String) => x.toInt) // String을 Int로 변환하는 예
실수 2: 비동기 처리에서 콜백을 사용하지 않음
비동기 작업에서 결과를 사용할 때 콜백을 잊어버리면 의도한 동작을 하지 않을 수 있습니다.
6. 정리
다음에 학습하면 좋은 주제는 비동기 프로그래밍과 고차 함수의 다양한 활용법입니다.