본문 바로가기
스프링 부트/코틀린

[코틀린] for문, while문, Iterator 사용법

by illlilillil 2022. 3. 9.

For문 사용법


일반적인 자바에서 for문을 사용할 수 있다.

val cakes = listOf("carrot", "cheese", "chocolate")

for (cake in cakes) {                               // 1
    println("Yummy, it's a $cake cake!")
}

 

for(i in 0..3) {             // 1
    print(i)
}
print(" ")

for(i in 0 until 3) {        // 2
    print(i)
}
print(" ")

for(i in 2..8 step 2) {      // 3
    print(i)
}
print(" ")

for (i in 3 downTo 0) {      // 4
    print(i)
}
print(" ")

결과 값

until은 <3을 뜻한다.

Step으로 설정할 수 있다.

downTo로 뒤에서부터 돌릴 수 있다.

 

 

while문 사용법


fun eatACake() = println("Eat a Cake")
fun bakeACake() = println("Bake a Cake")

fun main(args: Array<String>) {
    var cakesEaten = 0
    var cakesBaked = 0
    
    while (cakesEaten < 5) {                    // 1
        eatACake()
        cakesEaten ++
    }
    
    do {                                        // 2
        bakeACake()
        cakesBaked++
    } while (cakesBaked < cakesEaten)

}

 

Iterator 사용법


클래스 내의 변수는 ${animal.name}으로 호출한다.

class Animal(val name: String)

class Zoo(val animals: List<Animal>) {

    operator fun iterator(): Iterator<Animal> {             // 1
        return animals.iterator()                           // 2
    }
}

fun main() {

    val zoo = Zoo(listOf(Animal("zebra"), Animal("lion")))

    for (animal in zoo) {                                   // 3
        println("Watch out, it's a ${animal.name}")
    }

}

 

동등성 연산


자바와 조금 다릅니다.

 

==는 값의 타입만 검사합니다.

val authors = setOf("Shakespeare", "Hemingway", "Twain")
val writers = setOf("Twain", "Shakespeare", "Hemingway")

println(authors == writers)   // 1
println(authors === writers)  // 2

 

In 자바

참조 타입인 연산자 사이에 ==를 사용할 경우 주소 값으로 비교하게 된다.

String은 원시 타입이 아닌 참조 타입 즉 래퍼 타입이기 때문에 ==로는 주소 값이 다르기 때문에 false가 출력된다.

 

In 코틀린

==가 내부적으로 equals를 호출한다. 따라서 Strin을 비교해도 true가 나온다.

val a: String = "hi"
val b: String = "hi"

println(a == b) // true

참조 타입의 주소 값을 비교(reference comparision)를 할때는???

코틀린은 자바에는 없는 ===연산자를 지원한다. 참조 비교를 위해서 === 연산자를 사용하면 된다. 즉, 자바의 주소 값 비교인 ==와 코틀린의 ===가 동일한 역할을 한다.

 

삼항 연산자


자바와 같은 방식으로 사용할 수 있다. return 타입을 굳이 붙이지 않아도 컴파일러가 유추해낸다.

fun max(a: Int, b: Int) = if (a > b) a else b         // 1

println(max(99, -42))

 

댓글