5장. 코틀린에서 제어문을 다루는 방법

2023. 9. 7. 01:19kotlin/문법

참고

  • 해당 내용은 인프런에서 강의를 요약한 내용입니다. 강의보러가기

목차

  1. if 문
  2. Expression과 Statement
  3. Switch와 When

    if문

  • Java와 다를게 없다!!
Java
private void validateScoreIsnotNegative(int score) {
    if ( score < 0) {
        throw new IllegalArgumentException(String.format("%s는 0보다 작을 수 없습니다.", score));
    }
}
kotlin
fun validateScoreIsnotNegative(score: Int) {
    if (score < 0) {
        throw IllegalArgumentException("${score}는 0보다 작을 수 없다.")
    }
}

또 다른예시

Java
private String getPassOrFail(int score) {
    if ( score >= 50) {
        return "P";
    } else {
        return "F";
    }
}
Kotlin
fun getPassOrFail(socre: Int): String {
    if (score >= 50) {
        return "P";
    } else {
        return "F";
    }
}

차이점

  • Java에서 if-else는 Statement이지만, Kotlin에서는 Expression 이다!!
    • Statement: 프로그램의 문장, 하나의 값으로 도출 x
    • Expression: 하나의 값으로 도출되는 문장

Expression & Statement 예시

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


fun getGrade(score: Int): String {
    return if (score >= 90) {
        "A"
    } else if (socre >= 80) {
        "B"
    } else if (score >= 70) {
        "C"
    } else {
        "D"
    }
}

간단 Tip

Java
if (0 <= score && score <= 100) {
     ...
}
Kotlin
if (score in 0..100) {
    ...
}

Switch와 When

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


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

정의

when (값) {
    조건부 -> 어떠한 구문
    조건부 -> 어떠한 구문
    else -> 어떠한 구문
}
  • 조건부에는 어떠한 expression 이라도 들어갈 수 있다.
  • 조건부에는 여러개의 조건을 동시에 검사할 수 있다. (, 로 구분!!)
  • "값" 이 없을 수도 있다. → early return 처럼 동작한다.

예시

Java
private boolean startsWithA(Object obj) {
    if (obj instanceof String) {
        return ((String) obj).startsWith("A");
    } else {
        return false;
    }
}
Kotlin
fun startsWithA(obj: Any): Boolean {
    return when (obj) {
        is String -> obj.startsWith("A")
        else -> false
    }
}

Java
private void judgeNumber(int number) {
    if (number == 0 || number == 1 || number == -1) {
        System.out.println("블라블라");
    } else {
        System.out.println("블라블라");
    }
}
Kotlin
fun judgeNumber(number: Int) {
    when (number) {
        1, 0, -1 -> println("블라블라")
        else -> println("블라블라블라")
    }
}

Java
private void judgeNumber(int number) {
    if (number == 0) {
        System.out.println("블라블라");
        return;
    }

    if (number % 2 == 0) {
        System.out.println("블라블라");
        return;
    }

    System.out.println("블라블라");
}
Kotlin
fun judgeNumber(number: Int) {
    when { //값 부분이 없다.
        number == 0 -> println("블라블라")
        number % 2 == 0 -> println("블라블라")
        else -> println("주어지는 숫자는 블라블라")
    }
}