이번에는 Kotlin에서 조건문과 다중 선택문을 사용하는 방법에 대해 알아보겠습니다.
#4. Kotlin의 조건문: if
코틀린의 조건문은 다른 언어들과 마찬가지로 if를 사용합니다.
하지만, 코틀린의 if는 식표현(expression)으로, 반환 값을 가질 수 있습니다. 물론, 일반적인 구문(statement)처럼 사용하는 것도 가능합니다.
if가 식표현이기 때문에, 코틀린은 3항연산자를 지원하지 않습니다. 그냥 if와 else를 3항연산자 처럼 쓸 수 있기 때문입니다.
>기본 사용법
val max = if (a > b) {
a
} else {
b
}
앞서 설명한 데로, if는 식표현으로 반환 값을 가집니다. 그렇기 때문에 위 코드에서 max에는 if식에서 반환된 a 혹은 b가 저장됩니다.
> 간단히
val max = if(a>b) a else b
이런 형태로 if문을 3항연산자 처럼 사용할 수 있습니다.
> 주의 사항
val max = if (a > b) {
a
} else if(a==b){
println("두 수가 같음")
} else{...}
return 경우의 수를 모두 작성해야 합니다.
이게 무슨 말이냐면, 만약 else if로 경우의 수를 늘린다면, 반드시 else구문을 포함시켜 주어야 한다는 것입니다.
만약 조건문에서 if와 else if만 사용한다면, 다음과 같은 에러를 만나게 됩니다.
'if' must have both main and 'else' branches if used as an expression
이 경우, else{...} 구문을 추가해 주면 됩니다.
#5. Kotlin의 다중 선택문: when
코틀린에서는 다중 선택문(multiple branches)으로 when 키워드를 이용합니다.
사용법은 아래와 같습니다. when은 제일 위의 조건식부터 아래로 차례로 판단하며 내려갑니다. 매칭에 따른 결과는 표현식과 구문 어느것이든 가능합니다.
일치하는 조건식을 찾으면 해당 표현식 또는 구문이 실행되고 when 구문은 마무리 됩니다. 만약 찾기 못하면 else 구문이 실행됩니다. 따라서 else 구문은 when에서 필수 입니다.
개인적인 생각으로, 다른 언어의 switch/case문과 유사하다고 생각합니다.
> 기본 사용법
var num : Int = 2
when (num) {
1 -> {print("num is 1")
} 2 -> {print("num is 2")
} else -> { // Note the block
print("num is neither 1 nor 2")
}
}
이렇게, 조건 -> {표현식 혹은 구문}의 구성으로 사용됩니다.
> 간단히
var num : Int = 2
when (num) {
1 -> print("num is 1") // {}없이 이런 식으로도 사용 가능
2 -> print("num is 2")
else -> { // Note the block
print("num is neither 1 nor 2")
}
}
> 응용
조건에는 위와 같은 단일 값 뿐만 아니라 함수, 범위, 조건식 등, 다양한 요소들이 올 수 있습니다.
fun main(){
var num:Int = 0
val s:String = "0"
val validNumbers = mutableListOf(0,1,2,3,4,5)
when (num){
0,1 -> println("num == 0 or num ==1")
else -> println("otherwise")
}
when (num) {
Integer.parseInt(s) -> println("s encodes num")
else -> println("s does not encode num")
}
when (num){
in 1..10 -> println("num is in the range")
in validNumbers -> println("num is in valid numbers")
!in 10..20 -> println("num is outside the range")
else -> println("none of the above")
}
}
또한, 파라미터 없이 if, else if, else의 느낌으로 사용할 수도 있습니다.
val x:Int = 3
val y:Int = 2
when {
x.isOdd() -> println("x is odd") // isOdd()함수는 홀수인지 판별하는 함수입니다.
y.isEven() -> println("y is even") // isEven()은 짝수인지 판별하는 함수입니다.
else -> println("x+y is odd")
}
코틀린 공식 문서에서는 아래와 같은 서버통신관련 예제를 보여줍니다.
when 파라미터에 함수의 결과값을 받아와서 성공 또는 실패의 객체를 판단하고, 그에 대한 결과를 반환하는 Request.getBody()의 호출 결과값으로 반환하는 것입니다.
fun Request.getBody() =
when (val response = executeRequest()) {
is Success -> response.body
is HttpError -> throw HttpException(response.status)
}
'Kotlin' 카테고리의 다른 글
[Kotlin Basic] 변수와 타입, 그리고 함수 (0) | 2022.12.31 |
---|