관리 메뉴

나만을 위한 블로그

[Kotlin] 반복문(for) 사용법 정리 본문

개인 공부/Kotlin

[Kotlin] 반복문(for) 사용법 정리

참깨빵위에참깨빵_ 2022. 2. 13. 18:52
728x90
반응형

먼저 for문에 사용할 컬렉션을 정의한다.

 

fun main() {
    val names: List<String> = listOf("감", "배", "사과", "포도", "바나나", "파인애플", "오렌지")
}

 

이 names 라는 리스트 안의 값들을 출력하기 위해선 아래처럼 중괄호가 없어도 출력할 수 있다.

 

for (item in names) println(item)

// 감
// 배
// 사과
// 포도
// 바나나
// 파인애플
// 오렌지

 

중괄호를 사용한다면 아래처럼 쓸 수 있다. 결과는 위의 주석 앞에 "name : "이 붙은 형태일 뿐이다.

 

for (name in names) {
    println("name : $name")
}

 

그런데 for문을 사용하는 이유 중 하나가 배열 또는 컬렉션의 특정 인덱스를 갖는 아이템에 대해 어떤 처리를 하고 싶어서이다. 위의 for문 사용법으로는 이 처리가 불가능한데, 아래의 방법을 쓰면 가능하다.

 

fun main() {
    val names: List<String> = listOf("감", "배", "사과", "포도", "바나나", "파인애플", "오렌지")

    for (i in names.indices) {
        println("name : ${names[i]}")
    }
}

 

이 방식을 쓰면 println()이 아닌 if를 통한 조건으로 인덱스에 접근해 해당 값을 활용할 수 있다.

또는 내가 정의한 변수를 써서 for문 안의 아이템에 접근할 수 있다.

 

fun main() {
    val names: List<String> = listOf("감", "배", "사과", "포도", "바나나", "파인애플", "오렌지")
    for ((aaa, ddd) in names.withIndex()) {
        println("$aaa 번 아이템 : $ddd")
    }
}

 

aaa, ddd 변수를 각자 자신이 원하는 변수명으로 설정하면 된다.

 

그리고 코틀린에선 숫자를 출력할 때 조건을 걸어 출력하기가 편하다.

예를 들어 10부터 2씩 빼면서 짝수만 출력한다면 아래와 같이 사용할 수 있다.

 

fun main() {
    for (i in 10 downTo 1 step(2)) {
        println("i : $i")
    }
}

 

step(2)가 2씩 빼겠다는 뜻이니 이걸 없애면 10부터 1씩 숫자를 줄이면서 출력하는 걸 볼 수 있다.

이것 말고도 주어진 범위 안에서 짝수를 출력하는 다른 방법이 있다.

fun main() {
    val list = listOf(2, 8, 5, 7, 9, 6, 10, 22)
    val predicate: (Int) -> Boolean = {it % 2 == 0}
    println(list.count(predicate))
}

 

predicate라는 변수의 우측을 보면 받은 숫자를 2로 나눈 결과가 짝수인지 확인해서(Boolean) 맞을 경우 그 숫자의 개수를 리스트에서 센 다음 출력하도록 조건을 건다. list 안에서 짝수는 5개기 때문에 위 코드를 실행하면 5가 출력되는 걸 볼 수 있다.

 

만약 역순으로 출력하겠다면 어떻게 하면 될까? 위에서 정의한 names 리스트를 사용하는 경우 아래와 같이 할 수 있다.

 

fun main() {
    val names: List<String> = listOf("감", "배", "사과", "포도", "바나나", "파인애플", "오렌지")

    for (i in names.reversed()) {
        println("name 역순 출력 : $i")
    }
}

 

reversed() 메서드를 적용한 위 코드를 실행하면 마지막 아이템인 오렌지부터 감까지 거꾸로 출력되는 걸 볼 수 있다.

물론 String 값들이 들어있는 리스트에도 적용할 수 있다.

 

fun main() {
    val names: List<String> = listOf("감", "배", "사과", "포도", "바나나", "파인애플", "오렌지")
    val predicate2: (String) -> Boolean = {it.length == 2}
    println("길이가 2인 아이템은 몇 개인가? : ${names.count(predicate2)}")
}

 

문자열 길이가 2인 아이템의 개수를 세서 출력하니 위 코드를 실행하면 2가 출력된다.

반응형
Comments