우찬쓰 개발블로그

코틀린 foreach의 break, continue 본문

안드로이드/코틀린

코틀린 foreach의 break, continue

이우찬 2018. 12. 13. 18:29
반응형

일반 자바와 상식적으로 다르게, 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