우찬쓰 개발블로그
코틀린 foreach의 break, continue 본문
반응형
일반 자바와 상식적으로 다르게, foreach 문에서는 break를 다르게 구현해야 한다.
아마 대부분 이 글을 찾아왔다면, 아래와 같은 문제를 겪었을 것이다. 예시를 들어보자.
'1', '2'와 '끝'을 찍고 싶어서 다음 메소드를 만들었다고 치자.
fun testForeach() {
val testList = arrayListOf(1,2,3,4,5)
testList.forEach {
if(it == 3) return
println(it)
}
println("끝")
}
슬프게도 이 메소드는 '1', '2'만 찍히고 '끝'은 찍히지 않는다.
왜냐하면 여기서 return 은 메소드를 리턴시키기 때문이다.
그렇다면 당신은 이것도 시험해 봤을 것이다.
fun testForeach() {
val testList = arrayListOf(1,2,3,4,5)
testList.forEach {
if(it == 3) return@forEach
println(it)
}
println("끝")
}
또 슬프게도, 이 메소드는 '1', '2', '4', '5'와 '끝'을 찍고 끝난다.
왜나하면 여기서 return@forEach는 continue의 뜻이다. foreach에 라벨을 붙이거나 말거나와는 전혀 상관이 없다.
그럼 도대체 foreach의 break는 어떻게 한다는 걸까?
답은 다음처럼 해야한다.
fun testForeach() {
val testList = arrayListOf(1,2,3,4,5)
run breaker@ {
testList.forEach {
if(it == 3) return@breaker
println(it)
}
}
println("끝")
}
run에 라벨을 달아서 처리해 주면 깔끔하다.
도움이 되었다면.. 공감과 댓글 부탁해요 ㅎㅎ
반응형
'안드로이드 > 코틀린' 카테고리의 다른 글
value로 부터 enum class 찾기 (0) | 2019.07.30 |
---|---|
코틀린/안드로이드 변수 변경 감지 (0) | 2019.03.06 |
Comments