코틀린에서 람다 표현식을 사용하는 방법은?
_____A1: 람다 표현식은 익명 함수(anonymous function)로, 코드 내에서 간단하게 함수를 정의하고 전달할 수 있도록 하는 문법입니다. 일반적으로 간결하게 함수형 프로그래밍 스타일을 구현할 때 사용합니다.
---
Q2: 기본적인 코틀린 람다 표현식 문법은 어떻게 되나요?
A2: 기본 문법은 `{ 매개변수 목록 -> 본문 }` 형태입니다. 예를 들어, 두 수를 더하는 람다는 다음과 같습니다.
```kotlin
val sum = { a: Int, b: Int -> a + b }
println(sum(3, 5)) // 출력: 8
```
---
Q3: 람다를 변수에 저장하는 방법은?
A3: 람다 표현식을 변수에 할당할 때는 변수 타입을 함수 타입으로 지정하거나 코틀린이 타입을 추론하도록 할 수 있습니다.
```kotlin
// 명시적 함수 타입 지정
val greet: (String) -> Unit = { name -> println("Hello, $name") }
// 타입 추론
val greet2 = { name: String -> println("Hi, $name") }
greet("Alice") // 출력: Hello, Alice
greet2("Bob") // 출력: Hi, Bob
```
---
Q4: 람다의 매개변수가 하나일 때 단축 문법은?
A4: 매개변수가 하나뿐이면 이름을 생략하고, 암시적 이름 `it`을 사용할 수 있습니다.
```kotlin
val printSquare: (Int) -> Unit = { println(it * it) }
printSquare(4) // 출력: 16
```
---
Q5: 람다를 함수의 인자로 전달하는 방법은?
A5: 함수형 파라미터를 선언하고, 호출할 때 람다를 전달합니다.
```kotlin
fun operate(x: Int, y: Int, operation: (Int, Int) -> Int): Int {
return operation(x, y)
}
val result = operate(4, 5) { a, b -> a * b }
println(result) // 출력: 20
```
---
Q6: 마지막 인자가 람다인 경우 호출 문법의 특징은?
A6: 함수의 마지막 인자가 람다라면 괄호 밖으로 빼서 호출할 수 있습니다.
```kotlin
listOf(1, 2, 3).forEach { println(it) }
```
위 예제처럼 함수 인자가 람다 하나뿐인 경우 괄호를 생략하는 것이 관례입니다.
---
Q7: 람다 내부에서 외부 변수에 접근하거나 수정할 수 있나요?
A7: 네, 람다는 함수 외부에 선언된 변수에 접근할 수 있으며 수정도 가능합니다. 람다 내에서 변경된 변수는 외부에도 영향을 미칩니다.
```kotlin
var count = 0
val inc = { count += 1 }
inc()
println(count) // 출력: 1
```
Q8: 반환값이 있는 람다 표현식은 어떻게 작성하나요?
A8: 람다의 마지막 식(expression)이 자동으로 반환값이 됩니다. 명시적으로 `return`을 사용할 수 없으며, 로컬 변수 선언에도 `return`은 사용할 수 없습니다.
```kotlin
val triple: (Int) -> Int = { it * 3 }
println(triple(5)) // 출력: 15
```
---
Q9: 여러 줄 람다 작성법은?
A9: 중괄호 내에 여러 줄 코드를 쓰고, 마지막 줄이 반환값입니다.
```kotlin
val complexOperation: (Int, Int) -> Int = { a, b ->
val sum = a + b
val mul = a * b
sum + mul // 마지막 식이 반환값
}
println(complexOperation(2, 3)) // 출력: 11
```
---
Q10: 람다와 익명 함수(anonymous function)의 차이는?
A10: 익명 함수는 `fun` 키워드로 이름 없이 작성된 함수이며, `return` 사용이 가능합니다. 반면 람다는 식(expression)으로 작성되고, `return` 키워드는 사용할 수 없습니다.
```kotlin
val anonFunc = fun(x: Int): Int {
if (x < 0) return -1
return x * 2
}
```
---
Q11: 고차 함수에서 람다 체이닝은 어떻게 하나요?
A11: 여러 고차 함수 호출 시 람다를 연속적으로 사용할 수 있습니다. 예)
```kotlin
val numbers = listOf(1, 2, 3, 4)
val doubledSum = numbers.filter { it % 2 == 0 }
.map { it * 2 }
.sum()
println(doubledSum) // 출력: 12
```
---
Q12: 람다 내부에서 this 사용이 가능한가요?
A12: 람다가 클래스 멤버 함수 등의 문맥에서 쓰이면 해당 인스턴스의 this를 참조할 수 있습니다. 또한 with, apply, run 등의 범위 함수를 활용하면 람다 내부에서 this를 특정 객체로 지정할 수 있습니다.
```kotlin
val person = Person().apply {
name = "John"
age = 30
}
```
---
Q13: 코틀린에서 람다를 활용하는 대표적인 라이브러리 함수는?
A13: 표준 라이브러리 함수인 `let`, `run`, `with`, `apply`, `also` 등이 대표적이며, 각각 람다를 활용한 범위 함수(scope function)입니다.
```kotlin
val result = "Kotlin".let { it.length * 2 }
println(result) // 출력: 12
```
---
이상이 코틀린에서 람다 표현식을 사용하는 기본부터 응용까지 자주 묻는 질문과 답변입니다.
람다 표현식은 익명 함수(이름이 없는 함수)를 정의하는 방법으로, 주로 고차 함수(higher-order function)와 함께 사용됩니다.
고차 함수는 함수를 매개변수로 받거나 함수를 반환하는 함수입니다.
1. 람다 표현식의 기본 문법 람다 표현식은 중괄호 `{}`로 감싸서 정의하며, 매개변수 목록과 함수 본체로 구성됩니다.
기본적인 형식은 다음과 같습니다: ```kotlin val lambdaName: (Type1, Type
2) -> ReturnType = { param1: Type1, param2: Type2 -> // 함수 본체 } ``` 예를 들어, 두 숫자를 더하는 람다 표현식은 다음과 같이 정의할 수 있습니다: ```kotlin val sum: (Int, Int) -> Int = { a, b -> a + b } ```
2. 람다 표현식 사용하기 람다 표현식을 정의한 후, 이를 호출하여 사용할 수 있습니다.
위에서 정의한 `sum` 람다를 호출하는 방법은 다음과 같습니다: ```kotlin val result = sum(3,
5) // result는 8이 됩니다.
```
3. 고차 함수와의 결합 람다 표현식은 고차 함수와 함께 사용될 때 더욱 유용합니다.
예를 들어, 리스트의 각 요소에 대해 특정 작업을 수행하는 `map` 함수는 고차 함수의 좋은 예입니다.
```kotlin val numbers = listOf(1, 2, 3, 4,
5) val doubled = numbers.map { it * 2 } // [2, 4, 6, 8, 10] ``` 위의 코드에서 `it`은 람다 표현식의 단일 매개변수를 나타내며, `map` 함수는 각 요소에 대해 람다 표현식을 적용하여 새로운 리스트를 반환합니다.
4. 람다 표현식의 다양한 활용 람다 표현식은 다양한 상황에서 유용하게 사용됩니다.
예를 들어, 필터링, 정렬, 그룹화 등의 작업을 수행할 수 있습니다.
필터링 ```kotlin val evenNumbers = numbers.filter { it % 2 == 0 } // [2, 4] ``` 정렬 ```kotlin val sortedNumbers = numbers.sortedBy { -it } // [5, 4, 3, 2, 1] ``` 그룹화 ```kotlin val groupedByEvenOdd = numbers.groupBy { if (it % 2 == 0) "Even" else "Odd" } // {"Odd"=[1, 3, 5], "Even"=[2, 4]} ```
5. 람다 표현식의 장점 - 간결성 : 람다 표현식을 사용하면 코드가 더 간결해지고 가독성이 높아집니다.
- 유연성 : 함수형 프로그래밍의 개념을 활용하여 다양한 방식으로 코드를 작성할 수 있습니다.
- 재사용성 : 람다 표현식을 변수에 저장하거나 다른 함수에 전달하여 재사용할 수 있습니다.
6. 람다 표현식의 제한 사항 람다 표현식은 몇 가지 제한 사항이 있습니다.
예를 들어, 람다 표현식 내부에서 `this`를 사용할 경우, 람다 표현식의 외부 클래스의 `this`를 참조하게 됩니다.
이를 해결하기 위해 `it` 키워드를 사용하거나, `this@OuterClass`와 같은 방식으로 외부 클래스를 명시적으로 참조할 수 있습니다.
7. 코틀린에서 람다 표현식은 함수형 프로그래밍을 지원하는 강력한 도구입니다.
이를 통해 코드의 가독성을 높이고, 유연한 프로그래밍을 가능하게 합니다.
다양한 컬렉션 함수와 함께 사용하여 데이터를 처리하는 데 매우 유용하며, 고차 함수와의 결합을 통해 더욱 강력한 기능을 제공합니다.
람다 표현식을 적극적으로 활용하여 코드를 간결하고 효율적으로 작성해 보세요.
작성자:
김은호 [비회원]
| 작성일자: 1년 전
2024-09-09 09:47:11
조회수: 183 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 183 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.