4. if & for loop

조건문과 반복문

1) if문 — 자바와 같지만 “표현식”

  • 기본 문법은 자바와 동일

  • 하지만 코틀린에서는 if 자체가 값(Expression)을 반환

  • 따라서 삼항 연산자(?:)가 필요 없음

val max = if (a > b) a else b

자바였다면:

int max = (a > b) ? a : b;

👉 Kotlin은 if로 바로 값 할당 가능.


2) when — 자바 switch의 확장판

  • 자바의 switch 대신 사용

  • 조건에 값, 타입, 범위, 여러 조건 등을 지정 가능

  • else는 default와 같은 역할

  • 값 없는 when도 가능 → early return 같은 패턴에 유용

when (x) {
    1 -> println("one")
    in 2..5 -> println("range 2~5")
    is String -> println("it's a String")
    else -> println("other")
}

실무 활용

  • Enum / Sealed class와 조합 → 컴파일러가 모든 케이스 처리 여부 검사


3) for문 — 범위와 컬렉션 중심

for-each

for (item in list) {
    println(item)
}
  • Java: for (String item : list)

  • Kotlin: in 키워드 사용

전통적 for문 → Range & Progression

for (i in 1..3) println(i)       // 1, 2, 3
for (i in 3 downTo 1) println(i) // 3, 2, 1
for (i in 1..5 step 2) println(i)// 1, 3, 5
  • 1..3: 1부터 3까지 범위

  • downTo, step: 등차수열 기반 진행

👉 코틀린의 전통적 for문은 사실상 IntProgression(등차수열) 기반


4) while / do-while

  • 문법과 동작이 자바와 동일

var i = 0
while (i < 3) {
    println(i)
    i++
}

do {
    println(i)
    i--
} while (i > 0)

5) 실무 패턴

A. 리스트 순회

val names = listOf("A", "B", "C")
for ((index, name) in names.withIndex()) {
    println("$index: $name")
}

withIndex()로 인덱스와 값 동시 순회.

B. when + sealed class

sealed class UiState
object Loading : UiState()
data class Success(val data: String) : UiState()
object Error : UiState()

fun render(state: UiState) = when(state) {
    Loading -> showLoading()
    is Success -> showData(state.data)
    Error -> showError()
}

→ 새 상태 추가 시 컴파일러가 경고, 실수 방지.

C. Range 활용

for (i in 0 until 10) {  // 0..9
    println(i)
}

→ off-by-one 에러 줄이는 패턴.

Last updated