코틀린의 고차 함수 사용 예시는?
_____A1: 고차 함수(Higher-Order Function)는 함수를 인자로 받거나 함수를 반환하는 함수를 의미합니다. 즉, 함수가 일급 객체로 다뤄져 다른 함수의 매개변수나 반환값으로 활용될 수 있습니다.
Q2: 코틀린에서 고차 함수는 어떻게 선언하나요?
A2: 고차 함수는 함수 타입을 매개변수나 반환타입으로 선언합니다. 예를 들어, `(Int) -> Int`는 Int를 받아 Int를 반환하는 함수 타입입니다.
```kotlin
fun operate(x: Int, operation: (Int) -> Int): Int {
return operation(x)
}
```
Q3: 간단한 고차 함수 사용 예시는 어떤 게 있을까요?
A3: 리스트에 함수를 적용하는 map 함수가 대표적입니다. 예:
```kotlin
val numbers = listOf(1, 2, 3)
val doubled = numbers.map { it * 2 } // [2, 4, 6]
```
Q4: 고차 함수를 사용해서 함수를 반환하는 예시는?
A4: 함수 안에서 함수를 만들어 반환할 수 있습니다.
```kotlin
fun makeAdder(x: Int): (Int) -> Int {
return { y -> x + y }
}
val add5 = makeAdder(5)
println(add5(10)) // 15
```
Q5: 람다와 고차 함수의 관계는?
A5: 람다는 익명 함수로, 고차 함수의 인자로 자주 사용됩니다. 코틀린에서는 고차 함수 호출 시 람다를 간결하게 쓸 수 있습니다.
Q6: 고차 함수의 장점은 무엇인가요?
A6: 코드 재사용성 증가, 추상화 용이, 동작을 매개변수로 전달해 유연한 프로그래밍 가능 등이 있습니다.
Q7: 코틀린 표준 라이브러리에서 자주 쓰이는 고차 함수는?
A7: `map`, `filter`, `forEach`, `fold`, `reduce`, `sortedBy` 등이 있으며, 컬렉션이나 시퀀스를 처리할 때 주로 사용됩니다.
Q8: 고차 함수 사용 시 주의할 점이 있나요?
A8: 함수 객체 생성이 빈번하면 성능에 영향을 줄 수 있으니 필요한 경우 인라인 함수(inline) 사용을 고려하세요.
Q9: 인라인 함수와 고차 함수의 관계는?
A9: `inline` 키워드를 사용하면 고차 함수가 인라인 되어 람다 호출 오버헤드를 줄일 수 있습니다. 예:
```kotlin
inline fun operateInline(x: Int, operation: (Int) -> Int): Int {
return operation(x)
}
```
Q10: 고차 함수 예제 - 조건에 따라 함수 선택하기
A10:
```kotlin
fun chooseOperation(op: String): (Int, Int) -> Int {
return when(op) {
"add" -> { a, b -> a + b }
"subtract" -> { a, b -> a - b }
else -> { _, _ -> 0 }
}
}
val opFunc = chooseOperation("add")
println(opFunc(10, 5)) // 15
```
고차 함수는 코드의 재사용성을 높이고, 더 간결하고 읽기 쉬운 코드를 작성하는 데 도움을 줍니다.
이 글에서는 코틀린에서 고차 함수를 사용하는 다양한 예시를 살펴보겠습니다.
1. 기본적인 고차 함수 예시 가장 간단한 형태의 고차 함수는 다른 함수를 인자로 받는 것입니다.
아래의 예시에서는 두 개의 정수를 받아서 특정 연산을 수행하는 고차 함수를 정의합니다.
```kotlin fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int { return operation(a, b) } fun main() { val sum = operateOnNumbers(5,
10) { x, y -> x + y } val product = operateOnNumbers(5,
10) { x, y -> x * y } println("Sum: $sum") // 출력: Sum: 15 println("Product: $product") // 출력: Product: 50 } ``` 위의 코드에서 `operateOnNumbers` 함수는 두 개의 정수와 함수를 인자로 받아서, 해당 함수를 사용하여 연산을 수행합니다.
람다 표현식을 사용하여 `sum`과 `product`를 계산합니다.
2. 고차 함수와 리스트 처리 고차 함수는 컬렉션을 처리하는 데 매우 유용합니다.
코틀린의 표준 라이브러리에는 다양한 고차 함수가 포함되어 있습니다.
예를 들어, `map`, `filter`, `reduce`와 같은 함수는 리스트를 처리할 때 자주 사용됩니다.
```kotlin fun main() { val numbers = listOf(1, 2, 3, 4,
5) // 각 요소에 2를 곱하는 map 함수 val doubled = numbers.map { it * 2 } println("Doubled: $doubled") // 출력: Doubled: [2, 4, 6, 8, 10] // 짝수만 필터링하는 filter 함수 val evens = numbers.filter { it % 2 == 0 } println("Evens: $evens") // 출력: Evens: [2, 4] // 모든 요소의 합을 구하는 reduce 함수 val sum = numbers.reduce { acc, number -> acc + number } println("Sum: $sum") // 출력: Sum: 15 } ``` 위의 예시에서 `map`, `filter`, `reduce`는 모두 고차 함수로, 리스트의 각 요소에 대해 특정 작업을 수행합니다.
이러한 함수들은 코드의 가독성을 높이고, 복잡한 로직을 간결하게 표현할 수 있게 해줍니다.
3. 고차 함수와 클로저 코틀린의 고차 함수는 클로저(closure)와 함께 사용할 수 있습니다.
클로저는 함수가 정의된 스코프의 변수를 기억하는 기능을 말합니다.
```kotlin fun makeCounter(): () -> Int { var count = 0 return { count++ } } fun main() { val counter = makeCounter() println(counter()) // 출력: 0 println(counter()) // 출력: 1 println(counter()) // 출력: 2 } ``` 위의 예시에서 `makeCounter` 함수는 카운터를 생성하는 고차 함수입니다.
이 함수는 내부적으로 `count` 변수를 유지하고, 반환된 함수가 호출될 때마다 `count` 값을 증가시킵니다.
이렇게 클로저를 사용하면 상태를 유지하는 함수형 프로그래밍 패턴을 구현할 수 있습니다.
4. 고차 함수와 리팩토링 고차 함수를 사용하면 코드의 중복을 줄이고, 리팩토링을 통해 더 깔끔한 코드를 작성할 수 있습니다.
예를 들어, 여러 개의 리스트에서 특정 조건을 만족하는 요소를 찾는 기능을 고차 함수를 통해 구현할 수 있습니다.
```kotlin fun
6) val evenNumbers = numbers.customFilter { it % 2 == 0 } println("Even Numbers: $evenNumbers") // 출력: Even Numbers: [2, 4, 6] } ``` 위의 예시에서 `customFilter`라는 확장 함수를 정의하여 리스트에서 특정 조건을 만족하는 요소를 필터링하는 기능을 구현했습니다.
이처럼 고차 함수를 사용하면 코드의 재사용성을 높이고, 더 읽기 쉬운 코드를 작성할 수 있습니다.
결론 코틀린의 고차 함수는 함수형 프로그래밍의 개념을 쉽게 구현할 수 있게 해주는 강력한 도구입니다.
이를 통해 코드의 가독성을 높이고, 재사용성을 증가시키며, 복잡한 로직을 간결하게 표현할 수 있습니다.
다양한 예시를 통해 고차 함수의 사용법을 익히고, 실제 프로젝트에서 활용해 보시기 바랍니다.
작성자:
이서영 [비회원]
| 작성일자: 1년 전
2024-09-09 09:47:18
조회수: 161 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 161 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.