포스트

Kotlin의 제어문 다루기


if문


1
2
3
if(조건) {
    
}

Java와 동일!!


그렇다면 if-else문은?

  • java는 Statement지만, Kotlin에서는 Expression




Expression과 Statement


  • Statement : 프로그램의 문장 전체를 의미 / 하나의 값으로 도출 안됨
  • Expression : 반드시 하나의 값으로 도출되는 문장


예시

1
int score = 30 + 40;

30 + 40 = 70이라는 하나의 결과를 도출

  • Expression이면서 Statement


Java의 Expression 에러

1
2
3
4
5
String grade = if (score >= 50) {
    "P";
  }else{
    "F";
  }

Java는 Statement로 취급하기 때문에 gradeif-else를 담을 수 없다.


해당 문제를 해결하기 위한 3항 연산

1
String grade = score >= 50 ? "P" : "F";

3항 연산은 Expression이면서 Statement로 취급하기 때문에 하나의 값으로 사용 가능


Kotlin의 Expression

1
2
3
4
5
6
7
fun getPassOrFail(score: Int): String{
  return if(score >= 50){ 
      "P"
  } else{ 
      "F"
  }
}

위와 같이 if-else문을 하나의 값으로 보기 때문에 return처리 할 수 있다.

  • 그렇게 때문에 Kotlin은 3항 연산자가 존재하지 않는다.


if-else if-else문도 하나의 Expression

1
2
3
4
5
6
7
8
9
10
11
fun getGrade(score: Int): String{
    return if(score >= 90) {
        "A"
    } else if(score >= 80) {
        "F"
    } else if (score >= 70) {
        "C"
    } else {
        "D"
    }
}

if-else if-else문도 하나의 값으로 보기 때문에 return처리


논리 연산자를 쓰지않고 범위를 지정하는 in


in 예제

1
2
3
4
5
fun validateScoreIsNotNegative(score: Int){
  if(score in 0..100){
    println("score의 범위는 0부터 100입니다.")
  }
}

위와 같이 in을 사용하면 범위를 지정해서 조건문을 사용할 수 있다.
!inNot으로 사용




switch와 when


Java의 Switch문 예제

1
2
3
4
5
6
7
8
9
10
11
12
private String getGradeWithSwitch(int score) {
    swicth(score / 10) {
        case 9:
            return "A";
        case 8:
            return "B";
        case 7:
            return "C";
        default:
            return "D";
    }
}


Kotlin의 Switch문 예제

1
2
3
4
5
6
7
8
fun getGradeWithSwitch(score: Int): String {
   return when (score / 10) {
       9 -> "A"
       8 -> "B"
       7 -> "C"
       else -> "D"
   }
}

Java와는 다르게 Switch문을 그대로 반환할 수 있고 case를 사용하지 않고 ->을 이용해서 값을 바로 작성할 수 있다.


Switch문 in활용

1
2
3
4
5
6
7
8
fun getGradeWithSwitch2(score: Int): String {
    return when (score) {
        in 90..99 -> "A"
        in 80..89 -> "B"
        in 70..79 -> "C"
        else -> "D"
    }
}

in을 사용해서 범위를 지정하고 when에서 조건을 받지 않고 사용할 수 있다.


Kotlin의 when 구조


1
2
3
4
5
when(값) {
    조건부 -> 구문
    조건부 -> 구문
    else -> 구문
}

tip). Kotlin의 when은 Enum Class or Sealed Class와 함께 사용할 때 진가를 발휘


  • 조건부에는 어떤한 Experssion이라도 들어갈 수 있다. (ex. is Type)
    1
    2
    3
    4
    5
    6
    
    fun startsWithA(obj: Any): Boolean {
      return when(obj){
          is String -> obj.startsWith("A")
          else -> false
      }
    }
    

    objis를 통해 문자열임을 검증받기 때문에 조건문으로 사용하고, else에서 false를 체크하는 Switch문 사용


  • 여러개의 조건을 동시에 검사하는 예시
    1
    2
    3
    4
    5
    6
    
    fun judgeNumber(number: Int) {
      when(number) {
          1, 0, -1 -> println("어디서 많이 본 숫자입니다.")
          else -> println("1, 0, -1이 아닙니다.")
      }
    }
    

    1 또는 0 또는 -1인 경우, 3가지의 경우를 같이 사용해서 조건을 사용 가능


when의 값이 없는 경우 예제

1
2
3
4
5
6
7
fun judgeNumber2(number: Int) {
    when{
        number == 0 -> println("주어진 숫자는 0입니다")
        number % 2 == 0 -> println("주어진 숫자는 짝수입니다")
        else -> println("주어진 숫자는 홀수입니다")
    }
}

when에 값을 지정하지 않고 {}를 통해 조건으로 이루어진 when을 작성 가능

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.