Skip to content
ioob.dev
Go back

Kotlin 입문 2편 — 조건문과 반복문

· 2분 읽기

Table of contents

if는 표현식이다

Java에서 if는 문(statement)이다. 값을 반환하지 않기 때문에 삼항 연산자 ? :가 따로 존재한다. Kotlin에서는 if 자체가 값을 반환하기 때문에 삼항 연산자가 아예 없다.

val score = 85
val grade = if (score >= 90) "A" else if (score >= 80) "B" else "C"

println(grade) // B

블록으로 쓸 수도 있는데, 이때 각 블록의 마지막 줄이 반환값이 된다.

val message = if (score >= 60) {
    println("통과!")
    "합격"  // 이 값이 message에 들어감
} else {
    println("재시험...")
    "불합격"
}

이게 왜 좋을까? var로 변수를 먼저 선언하고 조건별로 값을 채우는 패턴이 사라진다. val + if 표현식 조합이면 변수 선언과 동시에 값이 확정되기 때문에, 이후에 값이 바뀔 걱정을 할 필요가 없다.

when

Java의 switch를 쓰다 보면 break를 빠뜨리거나, 타입 제한 때문에 불편할 때가 있다. Kotlin의 when은 이런 문제가 없다.

val day = 3

val dayName = when (day) {
    1 -> "월요일"
    2 -> "화요일"
    3 -> "수요일"
    4 -> "목요일"
    5 -> "금요일"
    6, 7 -> "주말"
    else -> "알 수 없음"
}

whenif처럼 표현식이라 값을 반환할 수 있다. 그리고 단순 값 비교를 넘어서 범위, 타입 체크, 조건식까지 가능하다.

val x = 15

when {
    x < 0 -> println("음수")
    x in 1..10 -> println("1~10 사이")
    x is Int -> println("정수인데 10 초과")
    else -> println("기타")
}

인자 없이 when을 쓰면 if-else 체인을 더 읽기 좋게 바꿀 수 있다. 조건이 3개 이상인 분기에서 특히 유용하다.

for와 범위(range)

Kotlin의 for는 Java의 향상된 for문과 비슷한데, 범위(range) 표현이 추가된다.

// 1부터 5까지 (5 포함)
for (i in 1..5) {
    print("$i ")  // 1 2 3 4 5
}

..은 끝 값을 포함한다. 끝 값을 제외하려면 until을 쓴다.

// 배열 인덱스 순회에 적합
for (i in 0 until 5) {
    print("$i ")  // 0 1 2 3 4
}

역순이나 간격 조절도 된다.

for (i in 5 downTo 1) {
    print("$i ")  // 5 4 3 2 1
}

for (i in 1..10 step 2) {
    print("$i ")  // 1 3 5 7 9
}

리스트를 순회할 때는 인덱스가 필요한지 아닌지에 따라 쓰는 방식이 달라진다.

val fruits = listOf("사과", "바나나", "딸기")

// 값만 필요할 때
for (fruit in fruits) {
    println(fruit)
}

// 인덱스도 필요할 때
for ((index, fruit) in fruits.withIndex()) {
    println("$index: $fruit")
}

Java에서 for (int i = 0; i < list.size(); i++)라고 쓰던 패턴이 훨씬 간결해진다.

while

whiledo-while은 다른 언어와 거의 같다.

var count = 3

while (count > 0) {
    println("카운트: $count")
    count--
}

do {
    println("최소 1번 실행")
} while (false)

한 가지 알아둘 점은, Kotlin에는 전통적인 for (int i = 0; i < n; i++) 스타일의 for문이 없다는 것이다. 범위 표현으로 완전히 대체된다.


다음 편에서는 Kotlin의 함수를 다룬다. 기본값 파라미터, named argument, 확장 함수가 코드를 얼마나 깔끔하게 만들어주는지 살펴보자.

3편: 함수


Share this post on:

Comments

Loading comments...


Previous Post
Kotlin 입문 3편 — 함수
Next Post
Kotlin 입문 1편 — 변수와 타입