들어가기 전

코틀린 변수 선언방법과 형변환 하는 방법에 대해 잘 모르시는 분들은  아래 링크 글을 먼저 보고 이 글을 보는 것을 추천드립니다.

https://hoestory.tistory.com/49

 

[Kotlin] 기본 문법 (1)

들어가기 전 코틀린 기본 문법을 설명하면서 이해를 쉽게 할 수 있도록 자바 문법과 비교해 가면서 설명할 것입니다. var, val 이란? 코틀린에서는 변수나 상수를 선언을 할 때 var와 val을 사용하여

hoestory.tistory.com

 

제어문

 

자바에서는 제어문이 if문과 switch case문이 있습니다. 그런데 코틀린에서 if문과 when문이 있습니다. 

공통점은 if문이 있고 차이점은 코틀린은 when문이 있습니다.

 

fun main() {
    val result = evenOrOdd(10);
    println(result)

}

fun evenOrOdd(num: Int): String {
    if(num % 2 == 0) {
        return "짝수"
    }else {
        return "홀수"
    }
}

 

위에 if문을 보면 자바처럼 작성할 수 있는 것을 볼 수 있습니다.

그런데 아래 코드는 자바와 같은 if문인데 전혀 다른 문법을 확인하실 수 있습니다.

 

fun main() {
    val result = evenOrOdd(10);
    println(result)

}

fun evenOrOdd(num: Int): String {
    return if(num % 2 == 0) {
         "짝수"
    }else {
         "홀수"
    }
}

 

return을 하나만 쓰고 위와 같이 if문을 작성할 수 있습니다. 작성할 수 있는 이유는 코틀린은 자바와 달리 if문을 expression으로 보고 있습니다. 자바에서는 if문을 statement를 보고 있어서 코틀린처럼 작성할 수가 없습니다.

 

Expression과 Statement 차이

expression은 이라서 값을 만들어내고 또 다른 식(expression)의 하위요소로 계산에 참여할 수 있습니다 그런데 statement는 이라서 최상위 요소로 존재하며 어떠한 값도 만들어내지 없습니다.

 

 

When

 

코틀린에서는 switch case문이 존재하지 않습니다. switch case문과 동일한 역할을 하는 것은 코틀린에서 when문입니다.

 

fun main() {
    val result = max(10);
    println(result)
}

fun max(num: Long): String {
    val number = 10L
    val result = when {
        num > number -> "${number}보다 숫자가 큽니다."
        num == number -> "${number}와 숫자가 같습니다."
        else -> "${number}보다 숫자가 작습니다."
    }
    return result
}

 

when문은 if문처럼 expression속성을 가지고 있어 if문처럼 바로 return을 할 수 있습니다.

 

fun main() {
    val result = max(10)
    println(result)
}

fun max(num: Long): String {
    val number = 10L
    return when {
        num > number -> "${number}보다 숫자가 큽니다."
        num == number -> "${number}와 숫자가 같습니다."
        else -> "${number}보다 숫자가 작습니다."
    }
}

 

When문은 아래 예제처럼 다양한 방법으로 작성할 수 있습니다.

 

fun main() {
    inRangeNumber(20)
    number(10)
    val containABC = containABC("BDE")
    println(containABC)
}

fun inRangeNumber(num: Int): Unit {
    when (num) {
        in 0..20 -> println("0~20사이에 있습니다.")
        in 21..50 -> println("21~50사이에 있습니다")
        else -> println("51이상입니다.")
    }
}
fun number(num: Int): String {
    return when (num) {
        10, 12, 14 -> "Success"
        else -> "Fail"
    }
}

fun containABC(obj: Any): Boolean {
    return when (obj) {
        is String -> obj.contains("ABC")
        else -> false
    }
}

 

  • in을 사용하는 부분은 범위를 나타냅니다.
  • is는 비교하려는 객체가 타입이 맞는지 비교합니다.

 

반복문

 

코틀린에서 반복문은 자바의 반복문과의 공통점과 차이점을 가지고 있습니다.

 

공통점

자바에서 향상된 for문 즉 for-each문을 사용하는 방식과 코틀린에서 for-each문 사용방식이 거의 동일합니다.

자바에서는 for-each를 사용할 때 ":"을 사용하는데 코틀린에서는 in을 사용합니다.

 

val numbers = listOf(1, 3, 5, 7, 8)
    for (number in numbers) {
        println(number)
    }

 

 

차이점

 

자바

int[] arr = {1,2,3,4};
for(int i = 0; i < arr.length; i++) {
    System.out.println(i);
}

 

코틀린

 

fun main() {
    val numbers = listOf(1, 3, 5, 7, 8)
    for(i in 0..numbers.size) {
        println(i)
    }
}

 

 

자바에서는 i++ 또는 i--을 통해서 i의 값 을 증가 감소시켜주는데 코틀린에서는 어떻게 i의 값을 증가시켜줄까?

 

코틀린에서는 자바처럼 i++로 값을 증가시켜주는게 아닌 "step"을 사용하여 값을 증가시켜줍니다.default로 step가 1로 되어있어 1씩 증가됩니다.

그리고 "downTo" + "step"를 같이 사용해서 감소시켜줄 수 있습니다.

 

val numbers = listOf(1, 3, 5, 7, 8)
for(i in numbers.size downTo 0 step 2) {
    println(i)
}

 

  • downTo를 하여 값을 감소시켜주고 step를 통해 2씩 감소시켜줍니다.