[TIL] #10 forEachIndexed

Yeon·2023년 7월 27일
0

내일배움캠프 - Kotlin

목록 보기
11/58
post-thumbnail

팀 프로젝트에서 리스트 내 각 인덱스와 요소를 출력할 수 있게 for문을 사용했다.
그런데 더 코틀린스러운 문법을 사용하고 싶어서 구글링을 해봤다.
forEachforEachIndexed로 더 가독성 좋게 구현할 수 있을 것 같아서 정리 해보고자 한다.




forEach & forEachIndexed

  • Iterable에 대한 확장함수
  • 기존의 for문을 사용하던 외부 반복에서 내부 반복으로 바꿔줄 수 있게 하여 가독성을 좋게 함
  • Iterable에 대한 반복을 돌리면서 각 원소에 대해 입력값으로 받은 action을 수행하도록 만드는 확장함수

1. forEach

  • collections의 각 element들에 대해서 특정한 작업을 수행

  • 아래 예시는 각 element를 출력

    var nums = arrayOf("uno", "dos", "tres", "cuatro", "cinco")
    nums.forEach{
        println(it)
    }
    
    // [output]
    // uno
    // dos
    // tres
    // cuatro
    // cinco

2. forEachIndexed

  • 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



Code Change

프로젝트에서 사용했던 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

0개의 댓글