when 기본 사용법
// when 예제
// when 기본 사용법
fun exValueInWhen(age: Int): String {
return when (age) {
10 -> "10살 입니다."
19 -> "19살 입니다."
else -> "성인 입니다."
}
}
when 에 인자가 없는 경우
각 분기의 조건이 true 또는 false 를 리턴하는 식을 이용하여 사용 가능
fun exWithoutParameterWhen(age: Int): String {
return when {
age == 10 -> "10살 입니다."
age == 19 -> "19살 입니다."
else -> "성인 입니다."
}
}
식(When)이 본문인 함수
리턴 타입, 리턴 키워드, 로직 선언 바디 {} -> = 으로 변경
fun exWithoutReturnValueInWhen(age: Int) =
when (age) {
10 -> "10살 입니다."
19 -> "19살 입니다."
else -> "성인 입니다."
}
enum class 를 when 으로 분기
enum class AgeGroup {
TEENS,
TWENTIES,
THIRTIES,
FORTIES,
FIFTIES,
SIXTIES,
SEVENTIES,
EIGHTIES,
NINETIES
}
enum class 안에 모든 값을 분기로 설정했을 때
fun exEnumAllValueInWhen(ageGroup: AgeGroup): String {
return when(ageGroup) {
AgeGroup.TEENS -> "십대 입니다."
AgeGroup.TWENTIES -> "이십대 입니다."
AgeGroup.THIRTIES -> "삼십대 입니다."
AgeGroup.FORTIES -> "사십대 입니다."
AgeGroup.FIFTIES -> "오십대 입니다."
AgeGroup.SIXTIES -> "육십대 입니다."
AgeGroup.SEVENTIES -> "칠십대 입니다."
AgeGroup.EIGHTIES -> "팔십대 입니다."
AgeGroup.NINETIES -> "구십대 입니다."
}
}
enum class 안에 모든 값을 분기로 설정하지 않았을 때, else 추가
fun exEnumSomeValueInWhen(ageGroup: AgeGroup): String {
return when(ageGroup) {
AgeGroup.TEENS -> "십대 입니다."
AgeGroup.TWENTIES -> "이십대 입니다."
else -> "삼십대 이상입니다."
}
}
when 으로 타입 검사를 진행하는 경우
interface Parent
class FirstChild: Parent
class SecondChild: Parent
fun exTypeCheckInWhen(parent: Parent): String {
return when (parent) {
is FirstChild -> "첫 번째 자식 클래스입니다."
is SecondChild -> "두 번째 자식 클래스입니다."
else -> "저는 남의 자식입니다."
}
}
명시적인 타입 캐스팅 없이 캐스팅 된 객체의 함수를 호출할 수 있음.
interface Car { fun move() }
class Mohave: Car {
override fun move() = println("모하비 차가 멋지게 지나갑니다.")
}
class Wrangler: Car {
override fun move() = println("랭글러 차는 그냥 존재가 멋집니다.")
}
fun exSmartCase(car: Car) {
if (car is Mohave) {
car.move()
}
else if(car is Wrangler) {
car.move()
}
else {
println("차가 아닙니다.")
}
}
정말 유익한 글이었습니다.