Android 앱/Kotlin Language

kotlin 코틀린 - 조건문 비교연산자

arvigoes 2020. 2. 28. 23:56

if 조건문

fun main() {
    var number = 5
    if(number > 10) {
        println("10 보다 크다")
    } else {
        println("10 보다 작다")
    }
}

 

if ( 조건 ) { 

      // 저건이 true 일 경우 실행할 구문 영역

}

else {

      // 조건이 false 일 경우 실행할 구문 영역

}

실행할 구문이 여러개가 될 수도 있기 때문에 각각의 영역을 구분하여 실행하기 위해,

중괄호( {} ) 를 사용하여 실행할 영역을 구분합니다.

함수의 영역표시에 사용되는 중괄호와 동일한 특성을 지닙니다.

 

여기에서 true 일 경우에만 실행할 내용이 있고 조건이 false 일 경우 수행할 내용이 없다면,

esle 구문은 생략 가능 하빈다.

fun main() {
    var number = 5
    if(number > 10) {
        println("한개 먹는다")
    }
}

 

비교 연산자(comparison operatiors)

if 같은 조건문에 주로 사용되는 연산자 입니다.

비교연산자의 결과는 boolean 타입으로 if 조건 절에서 바로 사용 될 수 있습니다.

 

연산자 예제  
== a == b a 와 b가 같다면 true 다르면 false
!= a != b a 와 비가 다르다면 true 같으면 false 
> a > b a 가 b 보다 크다면 true a 가 b 와 같거나 작다면 false
>= a >= b a 가 b 보다 크거나 같다면 true a 가 b 보다 작다면 false
< a < b a 가 b 보다 작다면 true a 가 b 와 같거나 크다면 false
<= a <= b a 가 b 보다 작거나 같다면 true a 가 b 보다 크다면 false

 

 

when 구문

다른 언어에서 사용되던 switch case 와 비슷합니다.

형식자체도 switch case 구문과 큰 차이가 없습니다.

when(변수) {

     변수Case1 -> {

           실행구문 

     }

     변수Case2 -> {

           실행구문 

     }

     변수Case3 -> {

           실행구문 

     }

     else -> {

     }

}

구문을 설명하면 when(변수) 변수가 어떤 값인지 에 따라서,

아래 구문중 처음 만나는 구문중 해당되는 구문의 실행영역을 수행하게 됩니다.

설명이 좀 어려운데 코드를 보시면 좀더 이해가 편하실 것 같네요

fun main() {
    var number = 5

    when(number){
        5 -> {
            println("number is 5!")
        } 
        6 -> {
        	println("number is 6!")
        } 
        7 -> {
         	println("number is 7!")
        } 
        else -> println("else")
    }

}

간단한 when 구문입니다.

결과는 어떨까요? 당연히 "number is 5! 가 출력됩니다.

변수 number 가 5 일 경우 -> { 실행구문 } 을 실행하라는 뜻입니다.

여러 언어의 switch case 등을 다뤄 봤는데 이렇게 직관적인 경우는 못 봤네요

지금처럼 -> 이하 구문이 한줄인 경우 중괄호({}) 를 생략 할 수 있습니다.

fun main() {
    var number = 5

    when(number){
        5 -> println("number is 5!")
        6 -> println("number is 6!")
        7 -> println("number is 7!")
        else -> println("else")
    }
}

여러 case 에 대한 동일한 수행

아래처럼 사용도 가능합니다.

수행해야할 내용이 동일한 경우 콤마로 구분하여 case 를 줄지어 준다면 같은 구문이 수행이 됩니다.

fun main() {
    var number = 5

    when(number){
        1, 3, 5, 7, 9 -> println("홀수!")
        2, 4, 6, 8 -> println("짝수!")
        else -> println("이상함")
    }
}

when 의 결과를 동작대신 값을 반환하는 표현식

fun main() {
    var number = 5

    var ret = when(number){
        5 -> "number is 5!"
        6 -> "number is 6!"
        7 -> "number is 7!"
        else -> "else"
    }
    println(ret)
}


fun main() {
    var number = 5

   println( when(number){
        5 -> "number is 5!"
        6 -> "number is 6!"
        7 -> "number is 7!"
        else -> "else"
    } )
}

코드가 조금 복잡해 보이는데 복잡할 것 없습니다.

첫번째는 when 의 결과를 ret 에 저장하여 출력한 것이고,

두번째는 when 의 결과를 바로 출력해 본것 입니다.

 

해당 case 가 여러개 일 경우

아래의 경우에는 두번째 5 case 에서 warning 경고가 뜨지만 사용할 수는 있습니다.

이런 비슷한 경우도 많으니 참고만 하시라고 강제로 빌드 해 보도록 하겠습니다.

결과가 어떨지 한번 예상해 보세요

fun main() {
    var number = 5

    when(number){
        5 -> println("number is 5!")
        6 -> println("number is 6!")
        7 -> println("number is 7!")
        5 -> println("number is 555555!")
        else -> println("else")
    }
}

결과

number is 555555! 는 출력이 되지 않았습니다.

warning이라 출력이 안된것이 아니라 case 중 제일 처음 true 인 경우에 대해서만,

수행이 된다는 점 꼭 기억 하시길 바랍니다.

이런 경우는 단순 타입에는 잘 없지만 타입이 복잡해지면 은근 case 구문 실수가 발생 할 수 있어요

 

그리고 지금은 변수추론에 의해 when 절의 변수가 Int 로 고정이 되어 case 로는 Int 로만 등록이 가능 합니다.

when 구문의 변수타입에 따라 case 로 사용 될 값은 아주 다양해 질 수 있습니다.

이부분에 대해서는 클래스 이후에서 다루도록 하겠습니다.