Kotlin Academy · 강의

모든 경우를 처리하는 when

모든 경우를 다룹니다

레슨 4/413개 단계

모든 경우를 처리하는 when은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

모든 경우 다루기

모든 경우를 처리하는 when은 가능한 모든 값을 다룹니다. 표현식으로 사용할 때는 항상 결과가 생성되도록 Kotlin에서 이를 요구합니다.

이 레슨에서는 when이 모든 경우를 처리하도록 만드는 방법과 그 이유를 알아봅니다.

그 밖의 분기가 모든 경우를 처리합니다

Int처럼 가능한 값이 제한되지 않은 대상에는 else 분기가 나열되지 않은 모든 경우를 처리합니다.

이렇게 하면 when이 항상 일치하도록 보장됩니다.

fun label(n: Int): String = when (n) {
    0 -> "zero"
    1 -> "one"
    else -> "many"
}

fun main() {
    println(label(0))
    println(label(5))
}

열거형은 모든 경우의 처리를 가능하게 합니다

열거형을 사용하면 컴파일러가 가능한 모든 값을 알고 있습니다. 모든 값을 나열하면 else를 생략할 수 있습니다.

enum class Direction { NORTH, SOUTH, EAST, WEST }

fun turn(d: Direction): String = when (d) {
    Direction.NORTH -> "up"
    Direction.SOUTH -> "down"
    Direction.EAST -> "right"
    Direction.WEST -> "left"
}

fun main() {
    println(turn(Direction.EAST))
}

열거형 경우를 빠뜨리면

표현식으로 사용하는 when에서 열거형 값을 하나라도 빠뜨리면 컴파일러가 오류를 보고합니다.

새 열거형 상수를 추가하는 순간 이러한 버그를 발견할 수 있습니다.

enum class Status { ACTIVE, PAUSED, STOPPED }

fun describe(s: Status): String = when (s) {
    Status.ACTIVE -> "running"
    Status.PAUSED -> "paused"
    Status.STOPPED -> "stopped"
}

fun main() {
    println(describe(Status.PAUSED))
}

봉인 클래스

봉인 클래스에는 컴파일 시점에 알려진 고정된 하위 클래스 집합이 있습니다.

따라서 when에서 else 없이도 모든 하위 타입을 대상으로 모든 경우를 처리할 수 있습니다.

sealed class Shape
class Circle(val r: Double) : Shape()
class Square(val s: Double) : Shape()

fun area(shape: Shape): Double = when (shape) {
    is Circle -> 3.14159 * shape.r * shape.r
    is Square -> shape.s * shape.s
}

fun main() {
    println(area(Square(4.0)))
}

모든 경우를 처리하면 좋은 이유

모든 경우를 처리하는 when은 누락된 경우를 조용한 버그가 아니라 컴파일 오류로 바꿉니다.

새 하위 클래스나 열거형 값을 추가하면 컴파일러가 업데이트해야 하는 모든 when을 알려 줍니다.

문에서는 모든 경우 처리가 필수는 아닙니다

문으로 사용할 때, 즉 대입하지 않을 때는 when에서 모든 경우를 처리하지 않아도 됩니다.

하지만 열거형과 봉인 타입에서는 모든 경우를 처리하는 것이 여전히 좋은 관행입니다.

enum class Light { RED, GREEN }

fun main() {
    val light = Light.RED
    when (light) {
        Light.RED -> println("stop")
        Light.GREEN -> println("go")
    }
}

봉인 클래스와 데이터를 결합하기

봉인 계층 구조에서는 데이터 클래스 하위 클래스를 자주 사용하므로, 모든 경우를 처리하는 패턴 일치와 속성에 접근할 수 있는 스마트 캐스트를 함께 얻을 수 있습니다.

sealed class Result
data class Ok(val value: Int) : Result()
data class Err(val message: String) : Result()

fun show(r: Result): String = when (r) {
    is Ok -> "ok: " + r.value
    is Err -> "error: " + r.message
}

fun main() {
    println(show(Ok(42)))
    println(show(Err("boom")))
}

안전망으로서의 그 밖의 분기

봉인 타입이나 열거형의 when에 else를 여전히 추가할 수 있지만, 그러면 컴파일러가 새 경우에 대해 더 이상 경고하지 않습니다.

else를 생략하면 컴파일 시점의 안전성이 유지되므로 닫힌 타입에서는 생략하는 것을 권장합니다.

enum class Coin { HEADS, TAILS }

fun flip(c: Coin): Int = when (c) {
    Coin.HEADS -> 1
    Coin.TAILS -> 0
}

fun main() {
    println(flip(Coin.HEADS))
}

불리언과 닫힌 대상

Boolean에는 값이 두 개뿐이므로 두 값을 모두 나열하면 else 없이도 when이 모든 경우를 처리합니다.

fun yesNo(flag: Boolean): String = when (flag) {
    true -> "yes"
    false -> "no"
}

fun main() {
    println(yesNo(true))
    println(yesNo(false))
}

모든 내용 정리하기

모든 경우를 처리하는 when은 모든 경우를 다룹니다:

  • else는 Int와 같이 가능한 값이 제한되지 않은 대상을 처리합니다
  • 열거형, 봉인 클래스, Boolean은 else 없이도 모든 경우를 처리할 수 있습니다
  • 새 경우를 추가하면 컴파일러가 누락된 경우를 표시합니다
sealed class Event
object Start : Event()
object Stop : Event()

fun handle(e: Event): String = when (e) {
    is Start -> "starting"
    is Stop -> "stopping"
}

fun main() {
    println(handle(Start))
    println(handle(Stop))
}

간단히 확인하기

모든 경우를 처리하는 조건식에 대한 이해를 확인해 보십시오.

복습

when에서 모든 경우를 처리하는 방법을 배웠습니다:

  • else는 가능한 값이 제한되지 않은 대상을 처리합니다
  • 열거형, 봉인 클래스, Boolean은 모든 경우를 다룰 수 있습니다
  • 컴파일 시점 검사가 누락된 경우를 발견합니다

이로써 조건식과 스마트 캐스트 과정이 끝났습니다.

무료로 시작

AI 튜터와 함께 Kotlin을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
51
레슨
203

자주 묻는 질문

“모든 경우를 처리하는 when” 강의는 무료인가요?

네 — “모든 경우를 처리하는 when” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“모든 경우를 처리하는 when”에서 뭘 배우나요?

모든 경우를 다룹니다 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“모든 경우를 처리하는 when” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 표현식으로서의 when
  2. 스마트 캐스트
  3. is와 as 연산자
  4. 모든 경우를 처리하는 when
← Kotlin Academy(으)로 돌아가기