[TIL/Kotlin] 코틀린 고급문법_반복자(Iterator)와 반복문 for문

2023. 5. 26. 22:48·TIL/Kotlin
728x90
반응형

1. 반복자(Iterator)

반복자란? 특정 구간 속에 있는 원소를 하나씩 반복적으로 꺼내기 위한 인터페이스를 뜻한다.

코틀린에는 Iterator라는 인터페이스가 기본적으로 선언되어 있으며, 다음과 같이 생겼다.

interface Iterator<out T> {
     operator fun next(): T
     operator fun hasNext(): Boolean
}

 

아래 예제를 통해 next와 hasNext 멤버 함수를 어떻게 사용하는지 살펴보자

fun main() {
    val range: IntRange = 1..3
    // IntRange 클래스에는 operator fun iterator(): IntIterator 연산자 멤버 함수 선언되어있음
    val iter: Iterator<Int> = range.iterator()

    // iter는 1..3 구간 중 첫 원소인 1의 바로 이전을 가리키고 있다.
    // 여기서 특정 원소를 가리키는 Iterator 내부의 변수를 '커서(Cursor)'라고 부름
    println(iter.hasNext()) // 다음 원소가 있으면 true, 없으면 false
    println(iter.next()) // 커서를 다음 원소 1로 이동, 1을 반환, 1 출력

    println(iter.hasNext())
    println(iter.next())

    println(iter.hasNext())
    println(iter.next())

    println(iter.hasNext())
}

2. 반복문 for문

for 문은 다음과 같은 형태로 사용한다.

for(변수 이름: 타입 in 표현식) { ... }

for 문의 소괄호 안에 선언된 변수는 스코프가 for문 안으로 한정되며, in 우측 표현식 속의 데이터를 하나씩 받는데 사용한다.

 

in 우측의 표현식에는 다음과 같은 연산자 멤버 함수를 갖는 객체만 지정할 수 있다.

operator fun iterator(): Iterator<자유타입>

만약, for(변수 이름: Double in 표현식) 형태로 사용하려 한다면,

표현식이 operator fun iterator(): Iterator<Double> 형태의 연산자 멤버 함수를 갖고 있어야 한다.

즉, for 문 속의 변수 타입과 Iterator의 타입 인수가 같아야 한다.

 

아래 예제를 통해 for 문을 사용하는 법을 살펴보자

fun main() {
    /* IntRange 클래스에는 Iterator<Int> 타입을 반환하는 iterator 연산자 멤버 함수가
    선언되어 있으므로 for문의 in 연산자에 적용 가능. Iterator의 타입 인수가 Int 이므로,
     Int 타입과 호환되는 타입의 변수만 for 문의 소괄호 속에 선언할 수 있음 */
    for(i: Int in 1..10)
        println("$i ")
    println()

    for(i: Int in 1.. 10) {
        if(i > 5)
            break
        print("$i")
    }
    println()

    for(i: Int in 1..5) {
        if(i % 2 == 0) {
            println("$i 는 짝수입니다.")
        }
    }
}

 

728x90
반응형

'TIL > Kotlin' 카테고리의 다른 글

[TIL/Kotlin] 코틀린 고급문법_열거 클래스(Enum Class)와 열거 클래스에 프로퍼티와 멤버 함수 선언 및 활용하기  (0) 2023.05.27
[TIL/Kotlin] 코틀린 고급문법_배열(Array)과 배열을 가변 인수로 활용하기  (0) 2023.05.26
[TIL/Kotlin] 코틀린 고급문법_in/out 키워드와 ..연산자와 범위 표현식  (0) 2023.05.26
[TIL/Kotlin] 코틀린 고급문법_클래스와 인터페이스에서 제네릭 사용하기, 제네릭이 적용된 인터페이스/클래스 상속·구현하기, 특정 타입을 상속·구현하는 타입만 인수로 받기  (0) 2023.05.26
[TIL/Kotlin] 코틀린 고급문법_리시버가 붙은 함수리터럴, 제네릭(Generic), 여러 타입을 인수로 받기, 구체화된 타입 매개변수  (0) 2023.05.26
'TIL/Kotlin' 카테고리의 다른 글
  • [TIL/Kotlin] 코틀린 고급문법_열거 클래스(Enum Class)와 열거 클래스에 프로퍼티와 멤버 함수 선언 및 활용하기
  • [TIL/Kotlin] 코틀린 고급문법_배열(Array)과 배열을 가변 인수로 활용하기
  • [TIL/Kotlin] 코틀린 고급문법_in/out 키워드와 ..연산자와 범위 표현식
  • [TIL/Kotlin] 코틀린 고급문법_클래스와 인터페이스에서 제네릭 사용하기, 제네릭이 적용된 인터페이스/클래스 상속·구현하기, 특정 타입을 상속·구현하는 타입만 인수로 받기
야리니
야리니
오늘보다 내일 더 성장하는 개발자가 되기 위한 야리니 블로그입니다 :)
    반응형
    250x250
  • 야리니
    야리니의 step by step
    야리니
  • 링크

    • GitHub
    • Linkedin
  • 전체
    오늘
    어제
    • 분류 전체보기 (478)
      • TIL (379)
        • Java (97)
        • Kotlin (28)
        • JPA (16)
        • Spring (37)
        • Oracle (22)
        • JDBC (7)
        • Web(HTML, CSS, JS, jQuery) (90)
        • View Template (31)
        • AWS (7)
        • HTTP (7)
        • CS (5)
        • Linux, Unix (2)
        • Python (20)
      • Trouble Shooting(Error) (37)
      • Algorithm (15)
      • Git,GitHub (8)
      • Diary (24)
      • 독서 (9)
      • Etc (6)
        • Mac (1)
        • 학원준비과정 (2)
  • 블로그 메뉴

    • 방명록
    • 태그
  • 공지사항

    • 안녕하세요 :)
  • 인기 글

  • 태그

    HTML
    java기초
    oracle
    백엔드 개발자
    국비지원학원
    Kotlin
    코틀린
    CSS
    쌍용교육센터
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
야리니
[TIL/Kotlin] 코틀린 고급문법_반복자(Iterator)와 반복문 for문
상단으로

티스토리툴바