본문 바로가기

안드로이드/코틀린

[Kotlin] Filter 함수로 For문 대체하기

반응형

코틀린의 Filter함수를 사용하면 for문과 if문을 보다 간결하게 표현할 수 있습니다.

성능상 이점을 확인하긴 어렵지만 프로그램의 규모가 커질수록 가독성 부분에선 이점을 확실하게 확인할 수 있습니다.

러닝커브가 높진 않지만 활용하려면 조금 생각을 해야합니다. 하지만 for문과 if문은 평소에 많이 사용하기 때문에 익숙해질수록 좋다고 생각합니다.

 

아래 5명의 사람중 선택된 사람의 이름들만 뽑는 메소드를 만든다고 가정하겠습니다.

결과 : "사람1,사람3,사람5 "
    data class Person(val name: String, val isSelect: Boolean)
    
    var list = listOf(
        Person("사람1",true),
        Person("사람2",false),
        Person("사람3",true),
        Person("사람4",false),
        Person("사람5",true)
    )

For문 사용

for문을 사용하면 다음과 같이 표현할 수 있습니다.

    fun getSelectPersonName(): String{
    
        var resultString = ""

        for(i in list.indices){
            if(list[i].isSelect){

                if(resultString.isEmpty()){
                    resultString = list[i].name
                }else{
                    resultString += ",${list[i].name}"
                }
            }
        }

        return resultString
    }

간단한 코드이지만 프로그램 규모가 커질수록 많은 사용되어 가독성을 해치더라구요. 

Filter함수 사용 

'filter' 와 joinToString를 사용하여 다음과 같이 표현 했습니다.

비록 joinToString은 Filter 함수가 아니지만 보다 코틀린 스럽게 코딩했다고 생각합니다.

    fun getSelectPersonName(): String{

        return list.filter {
            it.isSelect
        }.joinToString(separator = ","){
            it.name
        }
    }

라인수가 대략 반으로 줄어든걸 감안하면 프로그램 규모가 커질수록 이점은 더 커집니다.

 

코틀린을 사용하면서 조금 더 효율적으로 쓸수 있는 방법을 고민하곤 합니다. 이 포스팅을 보고 계신 개발자분들도 '보다 효율적이게', '보다 코틀린스럽게'를 생각하시면서 코딩 해보시는걸 추천합니다.

반응형