[Kotlin] 코틀린 기초(4) - Iteration

sw·2021년 12월 26일
0
post-custom-banner
  • while 루프
    코틀린에는 whiledo-while 루프가 있다. 두 루프의 문법은 자바와 같다.
while (조건){
    ...
}
// 조건이 참인 동안 본문을 반복 실행한다.

do{
    ...
}while (조건) 
// 맨 처음에 무조건 본문을 한 번 실행시킨 후에 조건이 참인 동안 본문을 반복 실행한다.
  • 코틀린에서는 자바의 for 루프( 초깃값, 증가 값, 최종 값)를 대신하기 위해 range를 사용한다. range는 기본적으로 두 값으로 이뤄진 구간이며 양끝을 포함한다.
for (i in 1..5){
    println(i)
}

/*
출력
1
2
3
4
5
*/
  • 증가 값을 갖고 range 이터레이션하기
for (i in 10 downTo 1 step 3){	
    println(i)
}
// 10 downTo 1은 역방향 수열을 만든다.
// step 2를 붙이면 증가 값의 절댓값이 2로 바뀐다.

/*
출력
10
7
4
1
*/
  • 끝 값을 포함하지 않는 range에 대해 이터레이션하기
for (i in 1 until 5){
    println(i)
}

/*
출력
1
2
3
4
*/
  • Map에 대한 이터레이션
    val binaryReps = TreeMap<Char, String>()	// 키에 대해 정렬하기 위해 TreeMap 사용

    for (c in 'A'..'F') {
        val binary = Integer.toBinaryString(c.code)
        binaryReps[c] = binary
    }
    for((letter, binary) in binaryReps){	// Map에 대해 이터레이션
        println("$letter = $binary")
    }
    
    // .. 연산자를 숫자 타입의 값뿐 아니라 문자 타입의 값에도 적용할 수 있다.
    // binaryReps[c] = binary는 binaryReps.put(c,binary)와 같다.
  • 컬렉션에 대한 이터레이션
val list = arrayListOf("10", "11", "1001")
for ((index, element) in list.withIndex()) {	// index와 함께 컬렉션을 이터레이션
    println("$index: $element")
}

- in으로 컬렉션이나 range의 원소 검사

  • in 연산자를 사용해 어떤 값이 범위에 속하는지 검사할 수 있다.
  • !in 연산자를 사용해 어떤 값이 범위에 속하지 않는지 검사할 수 있다.
fun recognize(c: Char) = when (c) {
    in '0'..'9' -> "숫자"
    in 'a'..'z', in 'A'..'Z' -> "문자"
    else -> "해당 없음"
}
  • 비교가 가능한 클래스라면( java.lang.Comparable 인터페이스를 구현한 클래스라면 ) 그 클래스의 인스턴스 객체를 사용해 범위를 만들 수 있다. Comparable을 사용하는 범위의 경우 그 범위 내의 모든 객체를 항상 이터레이션하지는 못한다.
    ex) "Java"와 "Kotlin" 사이의 모든 문자열을 이터레이션하는건 불가능하다.
    하지만 in 연산자를 사용하면 값이 범위 안에 속하는지 항상 결정할 수 있다.
>>> println("Kotlin" in "Java".."Scala")
true
  • 컬렉션에도 in 연산을 사용할 수 있다.
>>> println("Kotlin" in setOf("Java", "Scala"))
false
profile
끄적끄적
post-custom-banner

0개의 댓글