Computer Science/Kotlin

[Kotlin 기초] 3. 코틀린 조건문 if-else, when 사용 방법, if-else 한줄 사용법

sy.cho__ 2024. 5. 1. 21:41

 

안녕하세요 오늘은 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 사용방법에 대해 알아봤습니다.

다음 포스팅에서는 제일 많이 사용하는 문법 중 하나인 반복문에 대해 알아보도록 할게요.

 

 

[Kotlin 기초] 코틀린 반복문 - for, until, downto, step, while

오늘은 코틀린에서 반복문을 사용하는 방법에 대해 알아보겠습니다. 반복문은 조건문과 더불어 모든 언어에서 가장 많이 사용하는 문법인것 같아요.for문과 while문에 대해 알아볼게요! 1. for문

toberich.co.kr

 

오늘도 읽어주셔서 감사드립니다!

반응형