[Kotlin] 코틀린 조건문(if, when) 활용 및 예제
조건문은 프로그램 내에서 특정 조건이 참(true) 또는 거짓(false) 일 때 서로 다른 동작을 실행하기 위해 사용하는 제어문이다. 조건문은 프로그램의 흐름을 조절하고 다양한 상황에 대응할 수 있도록 도와준다. 코틀린은 조건 제어문으로 if 문과 when 식을 제공하고 있다.
if 문
if 키워드는 식을 검사해 그 값이 true나 false 중 어느 것인지 알아내고, 그 결과에 따라 작업을 수행한다. 이처럼 참이나 거짓을 표시하는 식은 불리언(Boolean)이라고 한다.
코틀린의 if 문의 간단한 사용 예시는 다음과 같다.
fun main() {
if (1 > 0) {
println("1은 0보다 크다.")
}
if (10 < 11) {
println("10 < 11")
println("10은 11보다 작다.")
}
}
// 출력
1은 0보다 크다.
10 < 11
10은 11보다 작다.
- if 다음에 있는 괄호 식은 반드시 true 또는 false로 평가되어야 한다.
- 식을 평가한 결과가 true인 경우 중괄호 안에 있는 코드가 실행된다.
다음과 같이 불리언 식을 변수로 선언하고 if 문에서 사용할 수도 있다.
fun main() {
val x: Boolean = 1 >= 1 // true
if (x) {
println("It's true")
}
}
// 출력
It's true
- x는 Boolean이기 때문에 if 문에서 x를 직접 사용하여 검사할 수 있다.
- >= 연산자는 왼쪽 항이 오른쪽 항보다 크거나 같으면 true를 반환하고, 오른쪽 항보다 작으면 false를 반환한다.
- <= 연산자는 반대로 오른쪽 항이 왼쪽 항보다 크거나 같으면 true를 반환하고, 왼쪽 항보다 작으면 false를 반환한다.
만약, 중괄호 안의 코드가 한 줄인 경우 다음과 같이 사용할 수 있다.
fun main() {
if (1 > 0) println("1은 0보다 크다.")
if (10 < 11)
println("10은 11보다 작다.")
}
// 출력
1은 0보다 크다.
10은 11보다 작다.
else 키워드를 사용하면 true인 경우와 false인 경우 모두 처리할 수 있다.
fun main() {
val n: Int = -1
if (n > 0) {
println("n은 0보다 크다.")
} else {
println("n은 0보다 작거나 같다.")
}
}
// 출력
n은 0보다 작거나 같다.
- 위 코드에서 else는 n <= 0가 true인 경우에 대하여 처리한다.
else와 if를 함께 사용하여 추가적으로 조건을 검사할 수 있다.
fun main() {
val n: Int = 0
if (n > 0) {
println("n은 0보다 크다.")
} else if (n == 0) {
println("n은 0이다.")
} else {
println("n은 0보다 작다.")
}
}
// 출력
n은 0이다.
- ==을 사용해 두 수가 같은지 동등성 비교 한다.
- 두 수가 다른지를 검사하기 위해서는 !=를 사용할 수 있다.
부정 연산자 !는 논리식을 반전한 결과를 내놓는다.
fun main() {
val x: Boolean = false
if (!x) {
println("!x는 true다.")
}
}
// 출력
!x는 true다.
코틀린에서는 if 문장 전체를 식으로 표현할 수 있다.
fun main() {
val n: Int = 10
val result = if (n > 100) true else false
println(result)
}
// 출력
false
- n은 100보다 작으므로 result에는 Boolean 타입인 false가 저장된다.
if 문장을 식으로 활용할 수 있기 때문에 다음과 같이 함수로 작성하여 활용할 수 있다.
fun trueOrFalse(exp: Boolean): String {
if (exp) {
return "It's true"
}
return "It's false"
}
fun main() {
val n: Int = 10
println(trueOrFalse(n >= 5))
println(trueOrFalse(n < 10))
}
// 출력
It's true
It's false
- trueOrFalse() 함수는 Boolean 타입의 exp를 입력받아 if 문으로 exp가 참인지 검사한다.
- main() 함수에서 사용한 trueOrFalse() 함수는 n ≥ 5, n < 10가 차례로 exp가 되어 n을 검사한다.
식 본문을 활용하면 return을 생략하고 if 문을 사용하여 결과를 반환할 수 있다.
fun trueOrFalse(exp: Boolean): String =
if (exp) {
"It's true"
} else {
"It's false"
}
}
fun main() {
val n: Int = 10
println(trueOrFalse(n >= 5))
println(trueOrFalse(n < 10))
}
// 출력
It's true
It's false
when 식
when 식은 세 가지 이상의 선택지가 있는 경우 사용하면 if 문보다 더욱 간결하게 코드를 작성할 수 있다. when 식은 어떤 값을 여러 가지 가능성과 비교해 선택한다. 다른 프로그래밍 언어의 switch 문 사용 방법과 매우 유사하지만 보다 간결하다.
when 식의 사용 방법은 다음과 같다.
fun main() {
val n = 30
when (n) {
10 -> println("ten")
20 -> println("twenty")
30 -> println("thirty")
else -> println("else")
}
}
// 출력
thirty
- n이 화살표(->) 왼쪽의 식과 가장 먼저 일치하는 곳의 화살표 오른쪽의 식을 실행하고 when 식이 끝난다.
- else는 일치하는 식이 없을 때 나머지에 대한 처리를 담당한다.
when 식 괄호 안에 값을 생략하고 식을 활용하여 조건 처리가 가능하며, 값을 리턴하지 않는 when 식은 else 생략이 가능하다.
fun main() {
val n = 30
when {
n < 30 -> println("n은 30보다 작다.")
n > 30 -> println("n은 30보다 크다.")
n == 30-> println("n은 30이다.")
}
}
// 출력
n은 30이다.
when 식의 결과를 변수에 담을 수 있다.
fun main() {
val n = 30
val result = when(n) {
10 -> "n은 10이다."
20 -> "n은 20이다."
30 -> "n은 30이다."
40 -> "n은 40이다."
50 -> "n은 50이다."
else -> "n은 10, 20, 30, 40, 50이 아닌 값이다."
}
println(result)
}
// 출력
n은 30이다.
when 식 또한 if 문과 같이 결과를 반환하는 용도로 사용할 수 있다.
fun expOrElse(exp: Boolean): String {
when {
exp -> return "It's true"
else -> return "It's false"
}
}
fun main() {
val n: Int = 10
println(expOrElse(n >= 5))
println(expOrElse(n < 10))
}
// 출력
It's true
It's false
- 값을 리턴하는 용도로 사용할 경우 else를 반드시 사용하여 모든 조건에 대한 처리를 정의해야 한다.
return을 when 식 앞에 두어 중복된 return 사용을 하지 않아도 된다.
fun returnWhen(n: Int): String {
return when(n) {
10 -> "n은 10이다."
20 -> "n은 20이다."
30 -> "n은 30이다."
40 -> "n은 40이다."
50 -> "n은 50이다."
else -> "n은 10, 20, 30, 40, 50이 아닌 다른 값이다."
}
}
fun main() {
println(returnWhen(60))
}
// 출력
n은 10, 20, 30, 40, 50이 아닌 다른 값이다.
식 본문을 활용하여 return 생략도 가능하다.
fun trueOrFalse(exp: Boolean): String =
when (exp) {
true -> "It's true"
false -> "It's false"
}
fun main() {
val n: Int = 10
println(trueOrFalse(n >= 5))
println(trueOrFalse(n < 10))
}
// 출력
It's true
It's false
- 이 경우 값을 반환하는 용도로 사용하지만, true, false를 통해 모든 조건에 대한 처리를 했기 때문에 else를 사용하지 않아도 된다.
when 식은 다양한 패턴으로 값을 비교할 수 있으며, 여러 조건을 동시에 처리할 수 있다.
fun checkNumberType(x: Int): String {
return when (x) {
0 -> "0"
1, 2 -> "1 또는 2"
in 3..9 -> "3 ~ 9"
in 10..99 -> "두 자리 숫자"
else -> "세 자리 이상의 숫자"
}
}
fun main() {
println(checkNumberType(34))
}
// 출력
두 자리 숫자
처리해야 할 구문이 여러 줄인 경우 중괄호를 사용하여 처리할 수 있다.
fun main() {
val n = 30
when (n) {
30 -> {
println("n은 30이다.")
println("30은 10보다 크다.")
println("30은 40보다 작다.")
}
20 -> {
println("n은 20이다.")
println("20은 10보다 크다.")
println("20은 30보다 작다.")
}
10 -> {
println("n은 10이다.")
println("10은 20보다 작다.")
}
}
}
// 출력
n은 30이다.
30은 10보다 크다.
30은 40보다 작다.
정리
- if 문과 when 식은 특정 조건에 대한 처리를 할 수 있다.
- when 식은 if 문과 비교하여 좀 더 확장된 형태의 조건 처리가 가능하다.
- 조건이 두 가지 이하인 단순한 경우 if 문을 활용하고, 세 가지 이상인 경우 when 식을 활용하는 것이 좋다.
참고 서적
https://link.coupang.com/a/bfViFU
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."