본문 바로가기

코틀린

코틀린(Kotlin) - 이터레이션 : while과 for 루프

코틀린의 특성 중, 자바와 가장 비슷한 것이 이터레이션이라고 할 수 있습니다.

코틀린 while루프는 자바와 동일하므로 간단하게만 알아보고, for 루프는 자바의 for-each루프에 해당하는 형태만! 존재합니다. 

결과적으로, for <아이템> in <원소들> 이런 형태를 취하고 있습니다.

while 루프

코틀린에는 자바와 동일하게, while과 do-while이 있고, 문법은 자바와 동일하며, 코틀린에서 추가한 새로운 기능도 없으니 빠르게 보고 넘어가도록 하겠습니다 ㅎㅎ

 

//while 루프
while(조건) {
  /*...*/
}

//do-while 루프
do {
  /*...*/
} while(조건)

for 루프

수에 대한 이터레이션

앞에서 설명했지만, 코틀린에는 자바의 for 루프(어떤 변수를 초기화하고, 그 변수를 루프를 실행할 때마다 갱신하고, 루프 조건을 체크하며 반복을 마치는 형태)에 해당하는 요소가 없습니다.

이러한 루프의 가장 흔한 형태인, 초기값, 증감값, 최종값을 사용한 루프를 대신하기 위해, 코틀린에서는 범위(range)를 사용합니다.

 

범위는 기본적으로, 두 값으로 이뤄진 구간이며, 보통은 그 두 값은 정수 등의 숫자 타입의 값이고, ".." 연산자로 시작 값과 끝 값을 연결해서 범위를 만듭니다.

 

for (i in 1..100) {
  println(i)
}

>> 1
>> 2
>> 3
>> ...
>> 100

 

/**
 * 증가값을 갖는 범위 이터레이션
 * downTo : 역방향 수열
 * step : 증감값의 절대값
 */
for (i in 100 downTo 1 step 2) { //100 < i < 1, 2씩 감소
  println(i)
}

>> 98
>> 96
>> ...
>> 2

 

또한, 끝 값을 포함하지 않는 닫힌범위에 대한 범위를 만들고 싶다면 "until" 함수를 사용하면 됩니다.

 

//둘다 동일한 표현
for (i in 0..size-1)	//0 <= i <= size-1
for (i in 0 until size)	//0 <= i < size

Map에 대한 이터레이션

코틀린에서는 for루프를 사용해 이터레이션 하려는 컬렉션의 원소를 풀어서 원하는 변수에 대입하여 사용할 수 있으며, 키를 사용해 Map의 값을 가져오거나, 키에 해당하는 값을 설정하는 코틀린만의 기능을 알아보겠습니다.

 

val map = HashMap<Key, Value>()
map[key] = value //Key에 해당하는 Value 값 할당 (자바의 put)
val value = map[key] //Key에 해당하는 Value 값 조회 (자바의 get)

//Map의 원소를 풀어서 두 변수에 대입
for ((key, value) in map) {
  println("$key -> $value")
}

in으로 컬렉션이나 범위의 원소 검사

위에서, 컬렉션이나 범위에 대해 in 키워드를 사용하는 방법을 알아보았습니다.

또한, 어떤 값이 해당 범위나 컬렉션에 속하는지 검사할 때에도 in을 사용하게 됩니다.

 

val x = 7

if(0 <= x && x <= 10)
if(x in 0..10)

>> true

//컬렉션에서 in 연산 사용하기
println("코틀린" in setOf("자바", "안드로이드")) //"코틀린"이 포함되어 있지 않음
>> false