본문 바로가기
Kotlin

조건문

by oncerun 2022. 11. 30.
반응형

if문

fun validationScoreIsNotNegative(score: Int) {
    if (score < 0) {
        throw IllegalArgumentException("${score}이 0보다 작습니다.")
    }
}

 

자바와 비교하면 코틀린에서는 void가 생략되었다. 대신 Unit이 존재하는데 Unit을 생략할 수 있다.

이후 Exception을 생성할 때 new를 사용하지 않았다. 

 

나머지는 자바와 별반 다르지 않는다. 

 

fun getPassOrFail(score: Int): String {
    if (score >= 50) {
        return "P"
    } else {
        return "F"
    }
}

 

Expression , Statement

 

자바에서 if-else는 Statement이지만 코틀린에서는 Expression이다. 

 

Statement는 하나의 프로그래밍 문장으로 취급되어 값으로 취급될 수 없다.

하지만 Expression은 값으로 도출되는 문장을 의미한다.

 

조건문을 변수에 담을 수 있다는 건가요?

 

fun getPassOrFail(score: Int): String {
    var a = if (score >= 50) {
        return "P"
    } else {
        return "F"
    }
}

 

오류가 나지 않는다..???

 

fun getPassOrFail(score: Int): String {
    return if (score >= 50) {
        return "P"
    } else {
        return "F"
    }
}

 

그래서 코틀린에서는 if-else를 표현식으로 처리하기 때문에 삼항 연산자가 존재하지 않는다.

 

또한 범위에 대한 체크를 진행할 때 in을 사용할 수 있다.

if (score !in 0..100) {
    throw IllegalArgumentException("${score}이 0보다 작습니다.")
}

if (score in 0..100) {
    throw IllegalArgumentException("${score}이 0보다 작습니다.")
}

 

 

switch, when

 

코틀린에서는 switch문이 사라졌다? 대신 when을 사용한다.

fun getGradeWithSwitch(score: Int): String {
    return when (score / 10) {
        9 -> "A"
        8 -> "B"
        else -> "C"
    }
}

 

문법이 되게 신기하다. 

 

fun getGradeWithSwitch(score: Int): String {
    return when (score) {
        in 90..99 -> "A"
        in 80 .. 89 -> "B"
        else -> "C"
    }
}

 

특정 값일 때 분기하거나, 범위를 통해 분기가 가능하다.

 

그럼 조건을 변수로 저장했다가 사용하는 것도 가능할 것 같다.

 

여러 개의 조건을 동시에 검사할 수도 있다.

 

fun getGradeWithSwitchV2(score: Int): Unit {
    when (score) {
        1, 0, -1 -> println("1, 0 ,-1")
    }
    when{
        score == -2 -> println("-2")
    }
}

 

when을 early return으로 사용할 수 있다. 그래서 값이 있으면 값에 매칭 되는지 확인하고 없다면 when 내부 조건 자체를 살펴보고 수행을 하게 된다. 

 

 

그리고 when은 Enum Class, Sealed Class와 함께 사용하면 더욱 좋다. 다음에 해당 클래스를 공부할 때 알아보자.

반응형

'Kotlin' 카테고리의 다른 글

예외 처리  (0) 2022.12.04
반복문  (0) 2022.12.04
연산자  (0) 2022.11.27
Type  (0) 2022.11.27
kotlin에서 null  (0) 2022.11.26

댓글