16. 라이브러리와 API (Standard Library)
코틀린 표준 라이브러리는 자바 컬렉션 위에서 동작하지만, 어마어마하게 유용한 함수들을 제공합니다.
map, filter뿐만 아니라 groupBy, associate, zip 등 데이터를 파싱하고 정렬하고 조작하는 수십 가지의 컬렉션 확장 함수들을 지원하여 복잡한 로직을 단 한 줄로 끝낼 수 있게 돕습니다.
data class User(val name: String, val age: Int, val city: String)
fun main() {
val users = listOf(
User("Alice", 25, "Seoul"),
User("Bob", 30, "Busan"),
User("Charlie", 25, "Seoul"),
User("David", 40, "Jeju")
)
// 1. filter 와 map
// 나이가 30 이상인 사람들의 이름만 추출
val over30Names = users.filter { it.age >= 30 }.map { it.name }
println("30세 이상 이름: " + over30Names)
// 2. groupBy (SQL의 GROUP BY와 완벽히 동일)
// 도시(city)를 기준으로 유저들을 그룹화한 Map을 반환합니다.
val usersByCity: Map<String, List<User>> = users.groupBy { it.city }
println("Seoul 유저 수: " + usersByCity["Seoul"]?.size + "명")
// 3. maxByOrNull, minByOrNull
// 특정 조건을 기준으로 최댓값/최솟값을 가지는 객체를 찾습니다.
val oldest = users.maxByOrNull { it.age }
println("가장 나이 많은 사람: " + oldest?.name)
// 4. any, all, none (조건 검사 Boolean)
val hasSeoul = users.any { it.city == "Seoul" } // 서울 사는 사람이 하나라도 있나?
val allAdults = users.all { it.age >= 18 } // 모두가 성인인가?
println("서울 거주자 존재? " + hasSeoul)
println("모두 성인인가? " + allAdults)
}