ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5강. 코틀린에서 조건문을 다루는 방법
    BackEnd/Kotlin 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("주어진 숫자는 홀수입니다.")
        }
    }

     

    감사합니다.

    반응형

    댓글

Designed by Tistory.