[Kotlin 기초] 3. 코틀린 조건문 if-else, when 사용 방법, if-else 한줄 사용법
안녕하세요 오늘은 Kotlin언어에서 반복문과 흐름제어 문법에 대해 알아보겠습니다.
흐름제어라는 말은 쉽게 말하면 개발자가 원하는 흐름으로(조건으로) 코드가 실행되는걸 의미합니다.
대표적으로 if-else문이 있습니다. 다른 프로그래밍 언어에서도 많이 볼 수 있는 문법이죠.
Kotlin에서는 when이라는 조건문도 추가되었습니다!
예제와 함께 한번 공부해볼게요!
1. if-else 표현식
if-else는 모든 언어를 통틀어서 가장 많이 쓰는 문법일것 같아요. 그 만큼 익숙하실텐데요.
Java와 문법이 크게 다르지 않습니다.
// if .. else
val string = "hello"
if(string == "hello"){
println("hello") // 출력
}
else{
println("world")
}
Java뿐만 아니라 다른 언어와도 사용방법은 비슷합니다.
다만 제가 여기서 if-else문이 아니라 "표현식"이라고 언급한 이유가 있습니다.
지난 포스팅에서 Kotlin은 함수를 표현식 스타일로 사용할 수 있다고 설명을 드렸습니다.
if-else도 동일하게 사용이 가능한데, 쉽게 말하면 조건에 따라 값을 할당하는게 가능합니다.
// kotlin의 if-else는 표현식으로 사용가능
val age : Int = 10
val isAdult = if(age > 20){
"adult"
}
else{
"child"
}
이렇게 if-else문을 사용해서 원하는 값을 return하여 변수에 할당할 수가 있습니다.
이걸 활용하면 Java에서 함수를 만들고 return하는 방식의 코드를 조금 더 간결화 할 수 있어요.
그래서 코틀린에서는 삼항연사자가 없습니다.
예를 들어 자바에서는 아래와 같이 삼항 연사자를 사용하곤 하죠.
// Java 삼항연산자
int a = 1;
int b = 2;
bool c = a > b ? true : false;
그러나 코틀린에서는 삼항연산자 대신 if-else를 사용할 수 있어요
// Kotlin에서 if-else를 삼항연사자로 사용
val a = 1;
val b = 2;
val c = if (a>b) true else false
그래서 Kotlin에서는 삼항연사자라는 문법이 없어졌습니다!
2. when 표현식
when은 Java의 switch문과 유사합니다.
//When - java와 switch와 유사함
var day = 2
val result = when(day){
1 -> "Mon"
2 -> "Tue"
3 -> "Wed"
4 -> "Tur"
5 -> "Fri"
6 -> "Stu"
7 -> "Sun"
else -> "Error" // 없을 경우 컴파일 에러
}
println(result) // Tue 출력
조금 더 문법이 간결해졌습니다.
switch문에서는 break문법을 깜빡하면 로직이 엉키는 이슈가 있었는데 코틀린의 when에서는 break를 사용하지 않아도 되서 실수를 보다 줄일 수 있습니다.
그리고 값이 1~7 이외 값이 들어오면 ERROR를 반환하도록 코드가 되어있는데, 만약 else구문이 없다면 컴파일 에러가 발생합니다.
발생할 수 있는 Error case에 대해 코틀린이 모두 체크하기 때문에 위와 같은 에러가 발생합니다. 실수를 최대한 줄일 수 있는 아주 좋은 기능인것 같아요. 대신 상황에 따라 else를 사용하지 않을 수 있어요.
fun main() {
// When - else 생략가능
when(getColor()){
Color.RED -> println("RED")
Color.GREEN -> println("GREEN")
}
}
enum class Color {
RED,GREEN
}
fun getColor() = Color.RED
enum 클래스를 만들고 RED,GREEN 2개 값을 추가했습니다.
이렇게 2개의 값이 존재하고 이 경우에 대해 when 조건을 사용하면 Error가 발생하지 않아요.
대신 enum에 다른 값이 추가되어있는데 when에 case가 없거나 else문이 없다면? 이 역시 컴파일 에러가 발생합니다.
fun main() {
// When - else 생략가능
when(getColor()){
Color.RED -> println("RED")
Color.GREEN -> println("GREEN")
}
}
enum class Color {
RED,GREEN,BLUE // BLUE 추가
}
fun getColor() = Color.RED
이렇게 Color 객체에 BLUE라는 새로운 값을 추가했지만
when구문에서 이에 대한 처리를 하지 않았다면 아래와 같이 컴파일 에러가 발생하는 것을 보실 수 있습니다.
그리고 when에서는 콤마를 사용해서 여러개의 조건을 한번에 처리할 수 있어요.
Java switch라면 case문을 2개 사용하고 break문을 하나만 사용하는 방식으로 구현할텐데
코틀린에서는 조금 더 코드를 간결하게 사용할 수 있습니다.
fun main() {
// 여러개의 조건을 콤마로 구분해 한줄에서 정의할 수 있음
when(getNumber()){
1,2 -> println("first")
else -> println("last")
}
}
오늘은 코틀린에서 흐름제어에 사용할 수 있는 if-else, when 사용방법에 대해 알아봤습니다.
다음 포스팅에서는 제일 많이 사용하는 문법 중 하나인 반복문에 대해 알아보도록 할게요.
오늘도 읽어주셔서 감사드립니다!