팀 프로젝트에서 리스트 내 각 인덱스와 요소를 출력할 수 있게 for문을 사용했다.
그런데 더 코틀린스러운 문법을 사용하고 싶어서 구글링을 해봤다.
forEach
과 forEachIndexed
로 더 가독성 좋게 구현할 수 있을 것 같아서 정리 해보고자 한다.
Iterable
에 대한 확장함수for
문을 사용하던 외부 반복에서 내부 반복으로 바꿔줄 수 있게 하여 가독성을 좋게 함Iterable
에 대한 반복을 돌리면서 각 원소에 대해 입력값으로 받은 action
을 수행하도록 만드는 확장함수collections
의 각 element
들에 대해서 특정한 작업을 수행
아래 예시는 각 element
를 출력
var nums = arrayOf("uno", "dos", "tres", "cuatro", "cinco")
nums.forEach{
println(it)
}
// [output]
// uno
// dos
// tres
// cuatro
// cinco
forEach
의 기능에 index
값을 알 수 있음
아래 예시는 각 index
값과 element
를 출력
var nums = arrayOf("uno", "dos", "tres", "cuatro", "cinco")
nums.forEachIndexed{ index, n ->
println("$index+1 $n")
}
// [output]
// 1 uno
// 2 dos
// 3 tres
// 4 cuatro
// 5 cinco
프로젝트에서 사용했던 for
문을 forEachIndexed
로 바꿔보자!
먼저 코드의 내용을 설명하자면, menu3Items
리스트 내 name
, price
, depict
가 담긴 음식 리스트가 담겨있다. menu3Items 리스트 내 음식의 이름, 가격, 설명과 인덱스 값을 불러와 출력하고자 하는 것이다.
아래 코드는 for
문으로 작성한 것이다.
for ((index, menuItem) in menu3List.withIndex()) {
val menuInfo = menuItem.info()
println("${index+1}. ${menuInfo.name} | W ${menuInfo.price} | ${menuInfo.depict}")
}
난 menuItems
의 요소와 그 요소의 인덱스 값을 불러오기 위해 withIndex
라는 함수를 사용했다.
그런데 for
의 기능과 withIndex
의 기능이 합쳐진 forEachIndexed
이 있다면 굳이 번거롭게 저렇게 작성하지 않아도 된다.
아래 코드는 menu3List
리스트 내 각 인데스와 요소를 출력하는 코드를 forEachIndexed
로 작성한 것이다.
menu3List.forEachIndexed { index, menuItem ->
val menuInfo = menuItem.info()
println("${index+1}. ${menuInfo.name} | W ${menuInfo.price} | ${menuInfo.depict}")
}
두 코드를 비교해보면 각 코드의 첫번째 줄이 바뀌었다. 성능 측면에서는 큰 차이는 없지만 개인적으로 난 forEachIndexed
를 사용하는게 더 깔끔해 보이고 가독성이 좋아보인다.
그리고 for
문은 다른 프로그래밍 언어에도 많이 쓰이지만 forEachIndexed
는 코틀린을 위한 함수라고 한다.
그니까 난 이번에는 코틀린스러운 forEachIndexed
로 작성해야겠다😊
[참고 사이트]
'forEach', kotlin GitBook
'forEachIndexed', kotlin GitBook
'[코틀린] forEach, forEachIndexed', Develop Log of Sky Titan
'[Kotlin Collection] 1.1 Kotlin foEach, forEachIndexed 이용하여 데이터 조작하기 - 예제 포함', 조세영의 Kotlin World