코틀린의 경우 여러 종류의 반복문이 있습니다. 이러한 반복문들은 2가지로 나눌 수 있습니다. for나 while 같은 예약어로 구성된 반복문과 repeat, foreach 같은 함수형 반복문이 있습니다. 오늘은 이 함수들을 알아보고 이반복문들의 비교를 해보도록 하겠습니다.
예약어
for
for(i in Iterable<T>){}
가장 기본적인 반복문입니다. 연속적인 값(Iterable<T>)들을 순환하며 해당 값들을 i에 넣고 연속적인 값들의 크기만큼 순환합니다.
while, do while
while(조건){}
do {} while(조건)
조건이 참일 경우에만 반복하는 반복문입니다. do while은 최소한번은 실행한다는 차이점이 있습니다.
함수형 반복문
repeat
repeat(){}
@kotlin.internal.InlineOnly
public inline fun repeat(times: Int, action: (Int) -> Unit) {
contract { callsInPlace(action) }
for (index in 0 until times) {
action(index)
}
}
인자값으로 넣어진 수만큼 람다함수의 로직을 반복하는 함수입니다. 인자가 0보다 작을 경우 수행을 하지 않으므로 이러한 부분을 이용하면 좋은 코드를 짤 수 있을 것 같습니다.
이러한 함수의 경우 continue나 break같은 로직을 수행할 때 continue나 break 같은 예약어가 써지지 않을 것입니다. 그 이유는 해당로직이 람다로 수행되기 때문에 다른 예약어로 이루어진 반복문 같은 경우 사용할 수 없는 것입니다.
fun main(){
repeat(100){
println(it)
if (it == 50) return@repeat //continue
if (it == 60) return //break
}
print("test")
}
만약 continue 나 break가 사용하고 싶다면 이러한 방법을 쓰면 됩니다. return문의 해당 함수의 링크를 적어주면 어디서 브레이크를 해줘야 할지 알고 return을 하기 때문에 이러한 방법을 쓰면 됩니다. 그렇지만 주의를 해줘야 할부분이 있습니다. 일반적인 return을 쓸 경우 함수자체를 나가버리기 때문에 repeat이후에 쓴 함수들 같은 경우 수행을 하지 못하고 나가버리게 됩니다. 예를 들어 위코드 같은 경우 test라는 문자열 출력이 되지 않고 나가질 것입니다.
forEach
Iterable<T>.forEach{}
@kotlin.internal.HidesMembers
public inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {
for (element in this) action(element)
}
해당하는 Iterable 즉 리스트, 배열, set, map 등 여러 연속된 자료형들을 순환하면서 입력함 람다로직을 수행하는 함수입니다. 특이한 점은 입력하는 람다함수가 Collection안에 있는 똑같은 자료형을 매개변수로 받기 때문에 기본적으로 it으로 주어진 이 값을 이용하여 로직을 수행할 수 있습니다. continue나 break 같은 경우 위 repeat와 똑같이 return으로 작동합니다.
forEachIndexed
Iterable<T>.forEachIndexed { index, i -> }
public inline fun <T> Iterable<T>.forEachIndexed(action: (index: Int, T) -> Unit): Unit {
var index = 0
for (item in this) action(checkIndexOverflow(index++), item)
}
이 함수는 위의 forEach의 이름이 비슷한 것처럼 비슷하게 동작을 수행합니다. 다른 점이 있다면 순환되는 해당 자료의 index 또한 매개변수로 받기 때문에 해당 index와 자료가 모두 필요할 때 잘 쓰입니다. 단 map 같은 경우 index로 이루어진 것이 아닌 key, value로 되어있기 때문에 map에서는 동작하지 않습니다. continue나 break 같은 경우 위 repeat와 똑같이 return으로 작동합니다.
'코틀린 > 문법및 라이브러리' 카테고리의 다른 글
[Kotlin] Coroutine Flow 맛보기 (0) | 2023.08.10 |
---|---|
[Kotlin] 단위 테스트 해보기(1) (0) | 2023.08.06 |
[Kotlin] 교집합(intersect), 합집합(union), 차집합(subtract) (0) | 2023.07.31 |
[Kotlin] Result class 가 뭐지? (0) | 2023.07.26 |
[Kotlin] Contract 로 스마트 케스팅 (0) | 2023.07.18 |