코틀린의 흐름제어는 조건문과 반복문, 크게 두 가지가 있다.
오늘은 조건문에 대해 알아보자.
코틀린의 조건문은 if와 when이 있다
프로그래밍을 접한 사람이라면 if가 어떤 상황에서 사용하는지 감이 잡힐 것이다. 만약, 프로그래밍을 접한 사람이 아니더라도 if의 뜻인 만약~라면으로 유추할 수 있다.
그렇다면 when은 무엇일까. when은 if와 유사하지만 다양한 조건에 대한 처리를 더욱 간편하게 구현할 수 있다. 다른 언어의 switch와 비슷하다고 생각하면 된다.
각각의 특징을 더 자세히 알아보도록 하자.
.
1. if 문
if문을 한국어로 번역하면 만약, ~~라면이라는뜻이다.
프로그래밍에서도 이와 비슷하다.
'만약 A(조건) 를 만족한다면, A-1 (내용)을 수행해라'라는 뜻이다.
if (조건) {
// 내용
}
여기서 주의할 점은 if안의 조건문의 결과가 참 또는 거짓 이어야 한다는 점이다.
val x = 10
if (x > 5) {
println("x는 5보다 큽니다.")
}
[출력결과]
x는 5보다 큽니다.
위 코드를 보면 x>5 라는 조건식이 있다. 여기서 x는 10이기 때문에 x>5의 조건은 참이다.
결과적으로 'x는 5보다 큽니다.'가 출력된다.
- if / else if / else
이는 만약에 조건 A가 참이라면 A1을 수행하고 만약에 B 조건이 참이라면 B1을 수행한다.
하지만, 모든 조건을 만족하지 않을 시 C를 수행한다.
if (조건 A) {
// 내용 (A-1)
} else if (조건 B) {
// 내용 (B-1)
} else {
// 내용 (C)
}
fun main() {
val score = 85
if (score >= 90) {
println("A")
} else if (score >= 80) {
println("B")
} else if (score >= 70) {
println("C")
} else if (score >= 60) {
println("D")
} else {
println("F")
}
}
[출력결과]
B
score의 값은 85이다.
첫 번째 if문에서 score의 값은 90을 넘지 않기 때문에 다음 else if 문으로 넘어간다.
두 번째 if문에서 score의 값이 80보다 크기 때문에 해당 조건문을 만족한다.
때문에 B가 출력된다.
- 간단하게 표현하기
fun main() {
val number2 : Int = 20
val number : Int = if (number2>30) 40 else 50
println(number)
}
[출력결과]
50
val number : Int = if (number2>30) 40 else 50
이렇게 간단하게 표현할 수도 있다.
number2가 30보다 크다는 조건을 만족하면 number의 값은 40, 만족하지 않으면 50이 할당된다.
2. when 문
when은 if와 비슷하면서도 다르다. 조건을 검사하여 수행한다는 점은 비슷하지만, if와 달리 조건식이 아닌 조건을 검사할 값이 들어간다는 점이다.
즉, when에는 참이나 거짓 값이 아니라 변수가 들어간다.
또한, 여러 개의 분기 조건문을 지원하며, 다양한 타입의 데이터를 비교할 수 있다.
when (조건을검사할 값) {
case1 -> 동작1
case2 -> 동작2
else -> 동작3
}
- 값 비교
fun main() {
val x = 5
when (x) {
1 -> println("x는 1이다")
2, 3 -> println("x는 2 또는 3이다")
in 4..10 -> println("x는 4와 10 사이에 있다")
else -> println("x는 다른 수이다")
}
}
[출력결과]
x는 4와 10 사이에 있다
처음 x값에 5를 할당한다.
when 문에서 x가 무슨 값을 가지느냐에 따라 결과가 달라진다.
만약 x가 1일 경우, 'x는 1이다'가 출력된다.
x가 2나 3일 경우, 'x는 2 또는 3이다' 가 출력된다.
마지막으로, x가 4부터 10까지의 범위에 속하는경우에는 'x는 4와 10 사이에 있다'가 출력된다.
만약, 이 모든 조건에 해당하지 않는 경우, 'x는 다른 수이다' 가 출력된다.
- 타입 비교
fun main() {
val data: Any = "Hello, World!"
when (data) {
is String -> println("data is a String: $data")
is Int -> println("data is an Int: $data")
is Boolean -> println("data is a Boolean: $data")
else -> println("data is something else: $data")
}
}
[출력결과]
data is a String: Hello, World!
Any 타입으로 선언된 data는 String, Int, Boolean 등 다양한 타입의 값이 할당될 수 있다.
현재는, Hello, World!라는 문자열이 할당되어 있다.
when 문에서는 data 변수의 타입이 어떤 타입인지 분기처리가되어 있다.
is 키워드를 사용하여 타입을 확인한다.
만약, data의 타입이 String 이면 "data is a String: Hello, World!"가 출력될 것이다.
만약, data의 타입이 Boolean이면 "data is a Boolean: Hello, World!" 가 출력될 것이다.
어떠한 조건도만족하지 않는다면 "data is something else: Hello, World!" 가 출력될 것이다.
위 코드는 data 변수가 String 타입이기 때문에 "data is a String: Hello, World!" 가 출력된다.
- 조건식
fun main() {
val y = 7
val z = when {
y == 5 -> "y는 5이다"
y == 7 -> "y는 7이다"
else -> "y는 다른 수이다."
}
println(z)
}
[출력결과]
y는 7이다
다음과같이 조건식으로도 사용될 수 있다.
z의 값은 when 문에서 어떤 조건을 만족하느냐에 따라 달라진다.
만약, y의 값이 5와 같다면 z에는 문자열 "y는 5이다"가 할당될 것이다.
만약, y의 값이 7과 같다면 z에는 문자열 "y는 7이다" 가 할당될 것이다.
만약, 어떤 조건도 만족하지 않는다면 z에는 문자열 "y는 다른 수이다 " 가 할당될 것이다.
'Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 배열 arrayOf(), intArrayOf(), Array (0) | 2023.05.15 |
---|---|
[Kotlin] 코틀린 반복문 for, while, do while 반복문 활용 (0) | 2023.05.08 |
[Kotlin] 코틀린 메소드 (Method) 선언하기 : 메소드 정의, 함수의 타입, 매개변수, 반환값 정의 방법 (0) | 2023.05.02 |
[Kotlin] 코틀린 연산자 (Operators)와 우선순위 (2) | 2023.04.08 |
[Kotlin] 코틀린 NULL (널) (0) | 2023.04.07 |