BackEnd/Kotlin

5강. 코틀린에서 조건문을 다루는 방법

hanseom 2024. 2. 4. 08:30
반응형
  1. if문
  2. Expression과 Statement
  3. switch와 when

 

if문

  if / if-else / if-else if-else 모두 Java와 문법이 동일합니다. 다음은 Java와 Kotlin if문 코드입니다.

  // 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보다 작을 수 없습니다.")
    }
  }

 

Expression과 Statement

  • Statement: 프로그램의 문장, 하나의 값으로 도출되지 않습니다.
  • Expression: 하나의 값으로 도출되는 문장입니다.

 

  다음은 Java와 Kotlin if ~ else문 코드입니다.

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

 

  역시 문법은 동일하지만, 한 가지 다른 점이 존재합니다. Java에서 if-else는 Statement이지만, Kotlin에서는 Expression 입니다. 위의 코드를 Expression으로 변경하면 다음과 같습니다.

  • Kotlin에서는 if-else를 expression으로 사용할 수 있기 때문에 3항 연산자가 존재하지 않습니다.
  // Java (3항 연산자)
  private String getPassOrFail(int score) {
    return score >= 50 ? "P" : "F";
  }
  
  // Kotlin
  fun getPassOrFail(score: Int): String {
    return if (score >= 50) {
        "P"
    } else {
        "F"
    }
  }

 

 if-else if-else 문법도 동일합니다.

  // Java
  private String getGrade(int score) {
    if (score >= 90) {
      return "A";
    } else if (score >= 80) {
      return "B";
    } else {
      return "C";
    }
  }
  
  // Kotlin
  fun getGrade(score: Int): String {
    return if (score >= 90) {
        "A"
    } else if (score >= 80) {
        "B"
    } else {
        "C"
    }
  }

 

Tip) 어떠한 값이 특정 범위에 포함되어 있는지, 포함되어 있지 않은지 판단하는 방법

  Java에서는 다음과 같이 작성했습니다.

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

 

  Kotlin에서 같은 방식을 사용할 수 있지만, 다음과 같이 사용도 가능합니다.

if (score in 0..100) {...}

 

switch와 when

  Kotlin에서는 switch case문 대신 when을 사용합니다.

when (값) {
  조건부 -> 구문
  조건부 -> 구문
  else -> 구문
}

 

  다음은 Java의 switch case문과 Kotlin의 When 코드입니다.

  // Java
  private String getGradeWithSwitch(int score) {
    switch (score / 10) {
      case 9:
        return "A";
      case 8:
        return "B";
      default:
        return "C";
    }
  }
  
  // Kotlin
  fun getGradeWithSwitch(score: Int): String {
    return when (score / 10) {
        9 -> "A"
        8 -> "B"
        else -> "C"
    }
  }

 

  Kotlin의 when은 특정 값 외 다음 코드와 같이 다양한 조건을 적용하여 분기할 수 있습니다.

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

 

when 특징

  • 조건부에는 어떠한 expression이라도 들어갈 수 있습니다. (ex. is Type)
  • 조건부에서 여러 개의 조건을 동시에 검사할 수 있습니다. (쉼표(,)로 구분)
  • (값)이 없을 수도 있습니다. (early return 처럼 동작)
  • when은 Enum Class 혹은 Sealed Class와 함께 사용할 경우, 더욱더 진가를 발휘합니다.

 

  when 특징에 대한 코드는 다음의 Java 및 Kotlin 코드를 참고하세요.

/* 조건부에는 어떠한 expression이라도 들어갈 수 있습니다. (ex. is Type) */
// 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 == 1 || number == 0) {
    System.out.println("0 또는 1입니다.");   
  } else {
    System.out.println("0 또는 1이 아닙니다.");
  }
}

// Kotlin 
fun judgeNumber(number: Int) {
    when (number) {
        1, 0 -> println("0 또는 1입니다.")
        else -> println("0 또는 1이 아닙니다.")
    }
}



/* (값)이 없을 수도 있습니다. (early return 처럼 동작) */
// Java
private void judgeNumber2(int number) {  
  if (number == 0) {
    System.out.println("주어진 숫자는 0입니다.");
    return;
  }

  if (number % 2 == 0) {
    System.out.println("주어진 숫자는 짝수입니다.");
    return;
  }

  System.out.println("주어진 숫자는 홀수입니다.");
  }
}

// Kotlin
fun judgeNumber2(number: Int) {
    when {
        number == 0 -> println("주어진 숫자는 0입니다.")
        number % 2 == 0 -> println("주어진 숫자는 짝수입니다.")
        else -> println("주어진 숫자는 홀수입니다.")
    }
}

 

감사합니다.

반응형