본문 바로가기

프로그래밍/Kotlin

[Kotlin 요약 정리] 4. 흐름 제어 구문과 연산자

4. 흐름 제어 구문과 연산자

1) if 표현식

- 조건식이 true일 경우 지정된 연산을 수행

- 코틀린에서는 구문이 아닌 표현식

- 값 대입시 else 생략 불가

- 형식

if(조건식1) 문장1

[if else(조건식2) 문장2]

[else 문장3]

 

fun checkOdd(count : Int): Boolean{

   val result = if(count%2 == 0){

       println("짝수")

       0

   } else {

       println("홀수")

       1

   }

   return result == 1

}



fun main() {

   println(checkOdd(11))

   println(checkOdd(32))

}

 

2) when 표현식

- switch 구문과 비슷하나 정수 이외의 다양한 타입을 대입 가능한 표현식

- 형식

when (값){

조건1 -> 문장

조건2 -> 문장

else -> 문장 // 생략 가능

}

 

fun when1(num : Int): String{

   when {

       num < 1 -> return "minus"

       num > 5 -> return "many"

   }



   return when(num){

       1 -> "one"

       2 -> "two"

       3 -> "three"

       4 -> "four"

       in 5..10 -> "many"

       !is Int -> "NaN"

       else -> "etc"

   }

}



fun when2(num : Int): String{

   return when(when1(num)){

       "one" -> "spring"

       "two" -> "summer"

       "three" -> "fall"

       "four" -> "winter"

       else -> "nothing"

   }

}



fun when3(num : Int){

   when(when2(num)){

       "spring", "fall" -> println("good")

       "summer", "winter" -> println("Oh...")

   }

}



fun main() {

   when3(1)

   when3(2)

   when3(5)

}



// 결과

good

Oh...

 

3) for 반복문

- 지정된 구간에서 조건에 따라 연산을 실행하는 구문

- 형식

for(반복조건) { }

 

fun main() {

   for(i in 1..5) print("$i ") // 1 2 3 4 5

   for(i in 1 until 5) print("$i ") // 1 2 3 4

   for(i in 1..5 step 2) print("$i ") // 1 3 5

   for(i in 5 downTo 1) print("$i ")  // 5 4 3 2 1



   val list = listOf("a","b","c")

   for(i in list) print("$i ") // a b c

   for(i in list.indices) print("$i ") // 0 1 2

   for((i, v) in list.withIndex()) print("$i=$v ") // 0=a 1=b 2=c

}

 

4) while 반복문

- 조건이 맞는 동안 반복해서 연산을 실행하는 구문

- 형식

while(조건) { }

 

fun main() {

   var count = 5



   while(count > 0) print(count--)

   

   do { print(count++) }

   while(count <= 5)

}



// 결과

54321012345

 

5) 전개연산자

- 배열을 단순하게 나열할 때 사용

- 배열에만 적용할 수 있기 때문에 List에 사용시 toTypedArray() 함수를 이용한다.

 

fun pr(vararg data: String) = data.forEach { print(it) }



fun main() {

   val arr = arrayOf("a", "b", "c")

   pr(*arr) // 결과: abc



   val arr2 = listOf(*arr, "d", "e")

   pr(*arr2.toTypedArray()) // 결과: abcde



   val arr3 = arrayOf(*arr2.toTypedArray(), "f", "g")

   pr(*arr3) // 결과: abcdefg

}



6) Null 안전 관련 연산자

- 코틀린은 Null 처리가 엄격해서 다양한 연산자를 제공한다(? ?: ?. !!)

- val num: Int? => num 변수를 null 허용으로 선언

- A ?: B => A가 null이면 B 실행

- A?.length => A가 null이 아니면 length

- A !! B => A가 null이 아닐 때만 B 실행(null일 시 예외 발생)

 

7) 기타

- 비트 연산자가 없고 함수로 사용 가능하다.

- 삼항 연산자와 논리 연산자 & | 도 제공하지 않는다.