본문 바로가기
프로그래밍/코틀린

K007. 코틀린 루프(반복분, Loop) 깊게 살펴보기 - For 루프

by K-인사이터 2024. 2. 2.
반응형

안녕하세요

K-IN 입니다.

 

코틀린 루프(Loop)에 대해서 알아보겠습니다. 

전체 강의 목록은 아래의 링크를 클릭해주세요.

 

K000. 코틀린 시리즈 (연재물)

안녕하세요 K-IN 입니다. 요즘 코틀린을 이용한 개발 프로젝트가 늘어나고 있습니다. 이에, 코틀린에 대해서 상세하게 정리하는 간행물을 제작하고자 합니다. 여기에 있는 링크들은 모두 코틀린

k-in.tistory.com

 

 

코틀린 루프(반복문, Loop)

코틀린은 루프(반복문)을 위한 다양한 방법을 제공합니다. 

  • for 
  • while
  • do-while
  • Iterators

각각의 특징을 살펴보면서 문법에 익숙해지는 시간을 가지겠습니다. 

 

코틀린 루프(반복문): for 

코틀린에서 for 루프는 반복자(iterator, 이터레이터)를 제공하는 어떠한 타입이든 반복(iterate)이/가 가능합니다. 

이러한 문법적인 특징은 C# 언어와 비슷합니다. 

 

만약 커스텀 Collection 객체에 대해 반복(iterate)를 지원하려면 아래와 같이 구현하면됩니다. 

  • 커스텀 컬렉션 객체가 iterator() 함수를 구현해야하며 Iterator<> 타입을 리턴
  • next() 를 구현
  • hasNext() 함수를 구현하고 Boolean 을 리턴

우선 기본적인 for 루프의 문법에 대해서 알아보겠습니다. 

  • 1..3 과 같은 표현을 범위 표현식(range expression)이라고 합니다. 
  • 파이썬의 range(1, 3) 과 같은 문법이지만 더욱 간결합니다. 
  • downTo, step 또한 range expression 에 포함되는 개념입니다.
  • "6 downTo 0 step 2" 표현식의 의미는 6에서 시작해 0까지 감소하되(downTo), 6-4-2 와 같이 2 만큼 간격을 벌려서 나열하라는 구문입니다. 즉, 6, 4, 2, 0 이 출력됩니다. 
for (i in 1..3) {
    println(i)
}

for (i in 6 downTo 0 step 2) {
    println(i)
}

 

다음으로는 인덱스 기반의 루프를 알아보겠습니다. 

➡️ 면접 질문 예상 문제 
코틀린은 범위(0..6)나 배열(arrayOf)에 대한 for 루프를 사용할 때 컴파일러가 인덱스 기반 루프로 변환하여 실행합니다. 
이때, 반복자(iterator)객체를 생성하지 않습니다. 

이러한 접근 방식을 통해 메모리 사용량을 줄이고 성능을 향상시키는 장점이 있습니다.
특히, 대규모 데이터를 처리하는 성능이 중요한 애플리케이션에 유리한 특성입니다. 

꼭 기억해두고 나중에 인터뷰에서 써먹으세요! 

 

아래는 인덱스 기반 루프 예시 코드입니다. 이러한 코드 패턴의 장점들을 떠올리면서 문법에 익숙해지도록 합니다. 

 val array = arrayOf("a", "b", "c")
    
for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

for (i in array.indices) {
    println(array[i])
}

 

오늘 배웠던 내용을 실제 코드를 실행하면서 배워보겠습니다. 

코틀린 플레이를 통해 개념적으로 익혔던 코드들을 수정해가면서 실행할 수 있습니다. (우측 상단의 초록색 실행 버튼을 눌르면됩니다.) 

 

 

요약

  • 코틀린의 for 루프는 C# 문법과 비슷합니다.
  • for 루프 외에도 do-while, while, iterators 를 이용한 루프 구현이 가능합니다.
  • 코틀린은 범위 표현식(range expression)을 지원하며 downTo, step, dotdot(..)을 통해 가독성있는 구현이 가능합니다.
  • 범위나 배열에 대한 for 루프를 구현하면 컴파일러는 인덱스 기반 루프로 변환하여 실행하여 메모리 사용량과 성능을 높입니다. 

 

이상입니다.

K-IN 올림. 

반응형