코틀린 강좌 #26 컬렉션 함수, 첫번째 이야기!

Kotlin/기본 문법 · 2020. 12. 24. 15:16

테크과학! DiMo

 

테크과학! DiMo

개발자가 얘기하는 생활 속 IT기술에 대한 과학! 여러분이 몰랐던, 혹은 정확히 알지 못했던 IT 테크놀러지를 파드립니다! 좋은 영상을 위한 채널 후원, 투네이션을 통해서 해주세요! 후원링크 htt

www.youtube.com

 

 

개발 환경: play.kotlinlang.org


컬렉션 함수


list나 set, map과 같은 컬렉션 또는 배열에 일반 함수 또는 람다 함수 형태를 사용하여 for문 없이도 아이템을 순회하며

 

참조하거나  조건을 걸고, 구조의 변경까지 가능한 여러 가지 함수를 지칭한다.

 

forEach
collection.forEach{
	println(it)
}

filter
collection.filter {
	it < 4 (it에 조건을 걸어줌)
}

map
collection.map {
	it *2 (it에 수식을 적용하여 값을 변경하여 컬렉션으로 만들어주고 반환)
}

 

 

any all none
collection.any{it == 0} 하나라도 조건에 맞으면 true
collection.all{it == 0} 모두 조건에 맞으면 true
collection.none{it == 0} 하나도 조건에 맞지 않으면 true

first
collection.first() 일반함수로 사용하는 경우 컬렉션의 첫번째 객체를 반환
collection.first{it > 3} 람다함수 형태로 중괄호 안의 it에 조건을 걸어주면 조건에 맞는 첫번째 객체를 반환

last
collection.last{it > 3} 조건에 맞는 마지막 객체를 반환

first -> find 대체 가능
last -> findLast로 대체 가능

first, last 함수 사용시 문제점
조건에 맞는 객체가 없는 경우( = 컬렉션이 비어 있는 경우)
NoSuchElementException이 발생.
이 때는 firstOrNull, lastOrNull을 사용하면 객체가 없는 경우 null을 반환

count
collection.count() 일반함수로 사용하면 컬렉션의 모든 아이템의 개수 반환
collection.count{it > 7} 중괄호와 함께 it에 조건을 걸어주면 조건에 맞는 아이템 갯수를 반환

 

컬렉션 함수들을 사용하면 반복문, 조건문을 사용하는 대부분을 대체할 수 있다는 장점

 

 

 

fun main() {
    val nameList = listOf("박수영", "김지수", "김다현", "신유나", "김지우")
    
    nameList.forEach{ print(it + " ")}
    println()
    
    println(nameList.filter{it.startsWith("김")})
    
    println(nameList.map {"이름 : " + it})
    
    println(nameList.any{it == "김지연"})
    println(nameList.all{it.length == 3})
    println(nameList.none{it.startsWith("이")})
  	
    println(nameList.first{it.startsWith("김")})  
    println(nameList.last{it.startsWith("김")})  
    println(nameList.count{it.contains("지")})
    
    println(nameList.lastOrNull{it.startsWith("학")}) 
}

Output:
박수영 김지수 김다현 신유나 김지우 
[김지수, 김다현, 김지우]
[이름 : 박수영, 이름 : 김지수, 이름 : 김다현, 이름 : 신유나, 이름 : 김지우]
false
true
true
김지수
김지우
2
null