when
: kotlin의 when문= 특정값을 선택할 수 있는 switch 선택문 + if 조건문의 범위 비교 기능 더해진 if문의 확장판이라고 볼 수 있다.
※ switch 문은 if 문의 연산식에서 사용되는 비교 연산자 중에 ==만 사용해서 같은 값인지를 비교하는 조건문.
Kotlin을 제외한 거의 모든 컴퓨터 언어에서는 switch라는 이름으로 사용되며 선택문이라고 불리기도 한다.
switch (변수){
case 비교값:
// 변숫값이 비교값과 같다면 이 영역이 실행된다.
break // 다르다면 아래의 것들이 실행된다. else와 같은 기능이라고 보면 된다.
}
when (파라미터/변수값) {
비교값 -> {
// 변숫값이 비교값과 같다면 이 영역이 실행됩니다.
}
} 위에서 살펴본 switch 문과 비교하면 값을 비교하는 줄 앞의 case가 없어지고 비교값 다음의 콜론이 화살표 연산자(->)로 대체되었다.
여러 개의 값을 하나의 when 문에서 비교할 수도 있다.
when (파라미터) {
비교값1 -> {
// 변숫값이 비교값1과 같다면 이 영역이 실행됩니다.
}
비교값2 -> {
// 변숫값이 비교값2와 같다면 이 영역이 실행됩니다.
}
else -> {
// 변숫값이 앞에서 비교한 것들과 다르면 이 영역이 실행됩니다.
}
}
콤마로 구분
: 특정 값을 비교하는데 결과 처리가 동일하다면 콤마(,)로 구분해서 한 번에 비교할 수 있다.
var now = 9
when (now) {
8, 9 -> {
Log.d("when", "현재 시간은 8시 또는 9시 입니다.")
}
else -> { // 위의 모든 조건에 맞지 않으면 else 다음 코드가 실행 됩니다.
Log.d("when", "현재 시간은 9시가 아닙니다.")
}
}
}
}/* [로그캣 출력 내용]
현재 시간은 8시 또는 9시 입니다.
/
범위값 비교(if문의 비교 연산자 중 <=, >= 과 같은 기능을 구현할 수 있다. if 확장판.)
: var ageOfMichael = 19 // 위의 ,대신 in을 썼다고 보면 된다.
when (ageOfMichael) {
in 10..19 -> {
Log.d("when", "마이클은 10대 입니다.")
}
!in 10..19 -> {
Log.d("when", "마이클은 10대가 아닙니다.")
}
else -> {
Log.d("when", "마이클의 나이를 알 수 없습니다.")
}
}
}
}/* [로그캣 출력 내용]
마이클은 10대 입니다.
/
※
if 문과 when 문은 언제 사용할까?
"조건문이 2개나 있는데 어떤 것을, 언제 사용할지 모를때 구분하는 방법.
일상적으로 사용하는 데이터 중에서 시간과 관련된 데이터가 있는데 시간 데이터에는 년, 월, 일, 요일, 시간 등의 많은 종류의 데이터가 있다.
이 데이터 중에서 연도 데이터와 요일 데이터를 비교하면 다음과 같은 구체적인 특징이 있다.
연도 데이터
... 2019, 2020, 2021, 2022, 2023 ... : 범위를 한정할 수 없고 개수가 많다.
요일 데이터
월, 화, 수, 목, 금, 토, 일: 값을 특정할 수 있고 개수가 7개로 한정되어 있다..
연도 데이터는 2021년과 같이 해당 값을 특정할 수 있지만, 범위가 넓고 미래의 어떤 연도까지 사용한다면 범위 자체를 한정할 수 없다.
범위가 넓고 값을 특정할 수 없을 경우에는 if 문을 사용해서 처리하는 것이 바람직하다.
반면, 요일 데이터는 7개로 범위가 제한되고 값도 특정할 수 있다.
이럴 경우는 when 문을 사용하는 것이 더 낫다.
when (요일) {
월 -> 영어 공부를 합니다.
화 -> 자전거 모임이 있습니다.
수 -> 친구를 만납니다.
목 -> 피아노를 칩니다.
금 -> 코딩 공부로 밤을 세웁니다.
토 -> 빨래를 합니다.
else -> 집 청소를 합니다. }
위 코드와 같이 값을 특정할 수 있고, 개수가 많지 않은 경우에는 when 문을 사용하면 쉽게 잘 읽히는 코드를 작성할 수 있다.
위 코드를 if 문으로 작성하면 아래와 같습니다.
if (요일 == 월) {
영어 공부를 합니다.
} else if (요일 == 화){
자전거 모임이 있습니다.
} else if (요일 == 수){
친구를 만납니다.
} else if (요일 == 수){
피아노를 칩니다.
} else if (요일 == 목){
코딩 공부로 밤을 세웁니다.
} else if (요일 == 수){
빨래를 합니다.
} else {
집 청소를 합니다.}
위 코드는 너무 많은 else if 문으로 가독성이 떨어진다.
이처럼 사용하려는 값을 특정할 수 있고 값의 범위가 넓지 않다면 when 문을 사용하는 것이 더 좋은 방법일 수 있다.