모든 경우를 처리하는 when
모든 경우를 다룹니다
모든 경우를 처리하는 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 표현식으로서의 when
- 스마트 캐스트
- is와 as 연산자
- 모든 경우를 처리하는 when