코틀린의 조건문(when)
2022/10/11(화요일)
조건문 when
조건문 when을 이해하기 위해서는 먼저 다른 언어의 switch 문을 공부하는 것이 도움된다. 다른 언어에서의 switch문을 if문과 비교하자면 switch 문은 if문의 연산식에서 사용되는 비교 연산자 중에 ==만 사용해서 같은 값인지를 비교하는 조건문이다.
코틀린을 제외한 거의 모든 컴퓨터 언어에서는 switch라는 이름으로 사용되며 선택문이라고 불리기도 한다.
switch(변수){
case 비교값:
//변수값이 비교값과 같다면 이 영역이 실행된다.
}
하지만 코틀린의 when 문은 다른 언어와는 다르게 같은 값뿐만 아니라 범위 값도 처리할 수 있고 사용 방법도 더 많다. 코틀ㄹ니에서 when문은 특정 값을 선택할 수 있는 switch의 사용법에 if 문의 범위 비교 기능이 더해진 if문의 확장판이라고 생각하면 될 거 같다.
예쩨를 통해 when 문의 사용법을 알아보겠다.
일반적인 형태의 when 문 사용하기
when 다음에 괄호( () )를 작성하고 괄호 안에는 주로 비교 대상 파라미터로 사용할 변수명을 입력한다. if에서처럼 괄호 다음에 중괄호 ( {} ) 를 사용해서 when 블록을 구분하고 블록 내부에서 비교할 값은 화살표 연산자 ( → ) 를 사용해서 선택한다.
when(파라미터){
비교값 -> {
// 변수값이 배교값과 같다면 이 영역이 실행된다.
}
}
앞에서 잠깐 살펴본 switch 문과 비교하면 값을 비교하는 줄 앞의 case가 없어지고 비교값 다음의 클론이 화살표 연산자 ( → )로 대체되었다. 여러 개의 값을 하나의 when 문에서 비교할 수도 있다.
when(파라미터){
비교값 1 -> {
// 변수값이 비교값1과 같다면 이 영역이 실행된다.
}
비교값 2 -> {
// 변수값이 비교값2과 같다면 이 영역이 실행된다.
}
비교값 3 -> {
// 변수값이 비교값3과 같다면 이 영역이 실행된다.
}
}
다음 예제처럼 실제 값을 적용해보면 now의 값이 10이기 때문에 가장 마지막의 else 코드 블록이 실행된다.
package com.example.kotlinPr
import android.util.log
fun main(args: Array<String>){
var now = 10
when(now){
8 -> {
Log.d("when", "현재 시간은 8시 입니다.")
}
9 -> {
Log.d("when", "현재 시간은 9시 입니다.")
}
10 -> {
Log.d("when", "현재 시간은 10시 입니다.")
}
else -> { // 위의 모든 조건에 맞지 않으면 else 다음 코드가 실행된다.
Log.d("when", "현재 시간은 9시가 아닙니다.")
}
}
}
현재 시간은 9시가 아닙니다.
콤마로 구분해서 사용하기
특정 값을 비교하는데 결과 처리가 동일하다면 콤마 ( , )로 구분해서 한번에 비교할 수 있다.
package com.example.kotlinPr
import android.util.log
fun main(args: Array<String>){
var now = 9
when(now){
8, 9 -> {
Log.d("when", "현재 시간은 8시 또는 9시 입니다.")
}
else -> { // 위의 모든 조건에 맞지 않으면 else 다음 코드가 실행된다.
Log.d("when", "현재 시간은 9시가 아닙니다.")
}
}
}
현재 시간은 8시 또는 9시 입니다.
범위 값을 비교하기
in을 사용해서 범위 값을 비교할 수도 있다. if 문의 비교 연산자 중 =, ≥ 와 같은 기능을 구현할 수 있다.
package com.example.kotlinPr
import android.util.log
fun main(args: Array<String>){
var ageOfMichael = 19
when(ageOfMichael){
in 10..19 -> {
Log.d("ageOfMichael", "마이클은 10대 입니다.")
}
!in 10..19 -> {
Log.d("ageOfMichael", "마이클은 10대가 아닙니다.")
}
else -> { // 위의 모든 조건에 맞지 않으면 else 다음 코드가 실행된다.
Log.d("ageOfMichael", "마이클의 나이를 알 수 없습니다.")
}
}
}
마이클은 10대입니다.