Kotlin 안드로이드 앱 프로그래밍 (7)

조건문과 반복문
조건문 if-else와 표현식

if-else 문

fun main() {
   var data = 10
   if (data > 0) {
      println("data > 0") */ data 0 보다 크면 */
   } else {
      println("data <= 0") */ data 0 보다 작거나 같을때 */
   }
}
> 실행결과
data > 0

if 문에 명시한 조건을 만족하면 if 부분을 실행, 그렇지 않으면 else 부분을 실행합니다. 또한 else if 문을 이용해서 아래와 같은 조건을 통해서 여러 개 나열할 수도 있습니다.

조건을 여러 개 나열한 예

fun main() {
   var data = 10
   if (data > 10) {
      println("data > 10") */ data 10 보다 클때 10 제외 */
   } else if (data > 0 && data <= 10") */ data 0 보다 크거나 10 보다 같거나 작을 때 */
      println("data > 0 && data <= 10")
   } else {
      println("data <= 0") */ data 0 또는 0 보다 작을 때 */
   }
}
> 실행 결과
data > 0 && data <= 10

위의 if-else문 else if 은 대부분의 프로그래밍 언어에서 제공하는 조건문과 차이가 없습니다. 그런데 코틀린에서는 if-else문은 표현식으로도 사용가능합니다. 표현식이란 결괏값을 반환하는 계산식을 말합니다. if-else문은 단순히 조건에 맞는 영역을 실행하는 용도로 사용해도 되지만, 결괏값을 반환하는 표현식으로도 사용가능합니다.

표현식으로 사용한 예

fun main() {
   var data = 10
   val result = if (data > 0) {
      println("data > 0")
      true
} else {
      println("data <= 0")
      false
   }
   println(result)
}
> 실행결과
data > 0
true

위의 소스를 보면 var result = if () {} else {} 형태로 작성하였습니다. 즉 if-else문의 조건에 맞는 코드를 실행하는 동작 외에 그 결괏값을 result 라는 변수에 대입하고 있는 if-else문 표현식 입니다.
if-else문을 표현식으로 사용하려면 else를 생략할 수 없습니다. if만 사용하거나 if-else를 if로 사용할 수 없다는 뜻입니다. 항상 else 구문이 있어야 하며 if-else 혹은 if-else if-else 형태로 사용하여야 합니다.
그리고 if-else 표현식이 반환하는 결괏값은 각 영역의 마지막 줄에 해당합니다. 즉 if-else 부분을 여러 줄로 작성했더라도 마지막 줄의 실행 결과만 반환합니다.

조건문 when
코틀린은 if-else문 말고도 when이라는 조건문을 작성할 수도 있습니다.

when 문 사용 예시

fun main() {
   var data = 10
   when (data) {
      10 -> println("data is 10")
      20 -> println("data is 20")
      else -> {
         println("data is not valid data")
      }
   }
}
> 실행 결과
data is 10

when 키워드 다음의 소괄호 () 안에 넣은 데이터가 조건이 되고 이 값에 따라 각 구문을 실행 합니다. 10 -> println() 코드는 when의 조건으로 지정한 데이터가 10 이면 -> 오른쪽에 있는 구문을 실행합니다.
when 문의 조건으로 정수가 아닌 다른 타입의 데이터를 지정할 수도 있습니다.

문자열 타입을 조건으로 사용

fun main() {
   var data = "hello"
   when (data) {
      "hello" -> println("data is hello")
      "world" -> println("data is world")
      else -> {
         println("data is not valid data")
      }
   }
}
> 실행 결과
data is hello

위 코드는 when 문에 지정한 데이터가 문자열이며 문자열 값에 따른 조건을 명시했습니다. 이처럼 when 문에서는 조건을 데이터 타입, 범위 등으로 다양하게 명시할 수 있습니다.

다양한 유형의 조건 제시

fun main() {
   var data: Any = 10
   when (data) {
      is String -> println("data is String") // data가 문자열 타입
      20, 30 -> println("data is 20 or 30") // data가 20 또는 30
      in 1..10 -> println("data is 1..10") // data가 1-10의 값
      else -> println("data is not valid")
   }
}
> 실행 결과
data is 1..10

위 소스에서 is는 타입을 확인하는 연산자이며 in은 범위 지정 연산자입니다. is String은 데이터가 String 타입이면 참이고, in 1..10은 데이터가 1부터 10까지 범위이면 참입니다.
또한 when 문을 이용하면서 데이터를 명시하지 않고 조건만 명시할 수도 있습니다.

조건만 명시한 예

fun main() {
   var data = 10
   when {
      data <= 0 -> println("data is <= 0")
      data > 100 -> println("data is > 100")
      else -> println("data is valid")
   }
}
> 실행 결과
data is valid

when은 if 문과 마찬가지로 표현식으로도 사용할 수 있습니다. when 문을 표현식으로 사용할 때는 else 문을 생략할 수 없습니다.

when 문을 표현식으로 사용

fun main() {
   var data = 10
   var result = when {
      data <= 0 -> "data is <= 0"
      data > 100 -> "data is > 100"
      else -> "data is valid"
   }
   println(result)
}
> 실행 결과
data is valid

댓글 남기기