본문 바로가기
Android/안드로이드 스터디(Kotlin)

Kotlin] 46. Iterable 인터페이스

by 김마리님 2020. 12. 23.

이 인터페이스는 앞서 closeRange할 때 말했던 IntRange, LongRange, CharRange에 있는 Progression 인터페이스가 상속한 인터페이스이다. 이 인터페이스는 for문의 in을 사용할 수 있게 해준다.

이 함수에는 세 가지 프로퍼티가 있는데,

first : 반복자의 첫 값 반환

last : 반복자의 마지막 값 반환

step : 반복자가 몇 스탭을 건너뛰고 다음 값을 반환하는지 그 값을 출력.

 

일단 예시를 보자.

package iterableEx

fun main() {
    val prog : IntProgression = 3..7
    println(prog.first)
    println(prog.last)
    println(prog.step)
    println("====")

    for(i in prog)
        println("$i")
}

 

결과값 :

3
7
1
====
3
4
5
6
7

 

뭐.. 익숙한 것 아닌가.. 보기에는 그냥.. 좀.. 평범하게 1씩 늘어나는 배열같다. 별 특별할 게 없어보인다.. step값이 나타는거 빼고.. 여기까지 보면 그냥 배열 쓰고 말지 왜 쓰냐 싶은데...

근데 이건 서막에 불과하다..(!)

 


 

iterable 함수들은 엄청난 확장함수들에 장점이 있다.

 

일단 코드를 보자

package iterableEx

fun IntProgression.print(){
    print("first : ${this.first} ")
    print("last : ${this.last} ")
    println("step : ${this.step}")

    for (i in this)
        print("$i ")
    println("\n")
}

fun main() {
    val prog : IntProgression = 7 downTo 3
    prog.print()

    val prog2 : IntProgression = (3..7).reversed()
    prog2.print()

    val prog3 : IntProgression = 10 downTo 2 step 2
    prog3.print()

    val prog4 : IntProgression = 2 until 5
    prog4.print()

}

 

downTo는 역순으로 Progression을 출력해준다. 왜 굳이 이런 확장함수를 사용하냐면...

 

    val prog5 : IntProgression = 7..3
    prog5.print()

 

컴파일로는 오류가 안나는데...

 

뒤에 출력되어야 할 반복문이 출력이 안된다.. 즉 역순은 반복자 처리를 할 수 없다는 소리가 된다. 그러니까 downTo를 이용하고.. 혹시라도 이걸 그래도 뒤집고 싶거든 .reversed() 함수를 사용한다(prog2 참조).

 

그리고 prog3을 보면 알겠지만 내가 뛰어넘을 수 있는 숫자도.. 설정 가능하다. 당연히 .. 연산자도 허용가능하다.

    val prog5 : IntProgression = 2..10 step 2
    prog5.print()

 

그리고 step에는 무조건 양수만 들어가야한다. 음수가 들어가면 Exception이 발생하는데...

 

Exception in thread "main" java.lang.IllegalArgumentException : Step must be positive, 예외가 발생한다.

 

 

until 명령어는 그 값 전 까지의 값들을 모두 호출해준다. 즉, until 5면 4까지의 값을 모두 출력해준다고 생각하면 된다.

약간 i<5와 유사하달까... 

 

 

결과 값 :

 

first : 7 last : 3 step : -1
7 6 5 4 3 

first : 7 last : 3 step : -1
7 6 5 4 3 

first : 10 last : 2 step : -2
10 8 6 4 2 

first : 2 last : 4 step : 1
2 3 4 

first : 2 last : 10 step : 2
2 4 6 8 10 

 

 

반응형

'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글

Kotlin] 48. Mutable Collection  (0) 2020.12.23
Kotlin] 47. Collection  (0) 2020.12.23
Kotlin] 45. ClosedRange  (0) 2020.12.23
Kotlin] 44. Comparable  (0) 2020.12.23
Kotlin] 43. Triple  (0) 2020.12.22