Kotlin에서 컬렉션(List, Map, Set 등)을 다룰 때 자주 사용하는 함수형 고차함수(Higher-Order Functions) 들이 있습니다.
그중에서도 map, filter, 그리고 람다식의 기본 매개변수 it 은
가장 자주 등장하는 핵심 문법이다.
it — 람다식의 기본 매개변수람다식에서 매개변수가 하나뿐일 때,
그 값을 직접 이름 붙이지 않아도 자동으로 it 으로 참조할 수 있습니다.
numbers.map { it * 2 }
위 코드는 아래와 완전히 동일합니다 👇
numbers.map { number -> number * 2 }
즉, it은 “현재 처리 중인 요소”를 나타내는 기본 이름이에요.
별도의 변수명을 쓰지 않아도 간단하게 표현할 수 있다는 게 장점입니다.
.map() — 리스트 변환 (Transformation)리스트의 각 요소를 변환하여 새로운 리스트를 만듭니다.
- 기존 리스트는 변경되지 않습니다.
- 각 요소에 변환 함수(람다식) 을 적용합니다.
| 개념 | 설명 |
|---|---|
| 동작 | list.map { it * 2 } → 모든 요소에 *2 적용 |
| 반환값 | 변환된 새로운 리스트 |
| 원본 | 변경되지 않음 |
한 줄 요약:
map은 “리스트의 모든 요소에 어떤 함수를 적용해서 변환한 결과를 리턴”합니다.
.filter() — 조건 필터링 (Filtering)조건식을 만족하는 요소만 걸러서 새로운 리스트로 반환합니다.
| 개념 | 설명 |
|---|---|
| 동작 | list.filter { it % 2 == 0 } → 짝수만 추출 |
| 반환값 | 조건을 만족하는 요소들만 담은 리스트 |
| 원본 | 변경되지 않음 |
한 줄 요약:
filter는 “조건을 통과한 요소만 남기는 함수”입니다.
map과 filter는 함께 이어서 쓸 수 있습니다.
이걸 함수 체이닝(Function Chaining) 이라고 부르며,
중간 리스트를 만들지 않고 한 줄로 연속적인 변환 과정을 표현할 수 있습니다.
val result = numbers
.filter { it > 3 } // 3보다 큰 숫자만 필터링 → [4, 5, 6, 7, 8]
.map { it * 10 } // 각 숫자에 10을 곱함 → [40, 50, 60, 70, 80]
.take(3) // 앞에서 3개만 가져옴 → [40, 50, 60]
이런 식으로 코드를 위에서 아래로 자연스럽게 읽을 수 있어
for문보다 훨씬 간결하고 가독성이 좋아집니다.
| 함수 | 역할 | 반환값 | 예시 |
|---|---|---|---|
map() | 각 요소를 변환 | 변환된 리스트 | list.map { it * 2 } |
filter() | 조건에 맞는 요소만 추출 | 필터링된 리스트 | list.filter { it % 2 == 0 } |
take(n) | 앞에서 n개만 추출 | 잘린 리스트 | list.take(3) |
it | 람다식의 기본 매개변수 | 현재 요소 | { println(it) } |
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8)
// 1️⃣ map — 리스트의 각 요소를 변환 (Transformation)
val doubled = numbers.map { it * 2 }
println("두 배가 된 숫자들: $doubled") // [2, 4, 6, 8, 10, 12, 14, 16]
// 2️⃣ filter — 조건을 만족하는 요소만 남김 (Filtering)
val evens = numbers.filter { it % 2 == 0 }
println("짝수들: $evens") // [2, 4, 6, 8]
// 3️⃣ 체이닝 — filter + map + take
val result = numbers
.filter { it > 3 } // [4, 5, 6, 7, 8]
.map { it * 10 } // [40, 50, 60, 70, 80]
.take(3) // [40, 50, 60]
println("최종 결과: $result")
}
it 👉 현재 요소를 가리키는 기본 변수.map() 👉 변환 (Transformation).filter() 👉 선택 (Filtering)