중급 문법



이번에는 if문과 for문 when문 등의 문법을 통하여 직접적으로 제어를 해보겠습니다.


if문


코틀린의 if문은 기존에 사용하던 자바의 if문과 비교해 큰 차이가 없습니다.


fun main() {
    var a = 10
    var b = 20

    if (a > b)
        println("a가 더 크며 값은 ${a}입니다.")
    if (a < b)
        println("b가 더 크며 값은${b}입니다.")
    if (a >= b)
        println("a가 더 크거나 같습니다.")
    if (a <= b)
        println("b가 더 크거나 같습니다.")
    if (a == b)
        println("a와 b의 값이 같습니다.")
}

보통 if문에서 사용하는 비교 연산자는 위의 코드에 들어 있는 >, <, >=, <=, ==등 입니다.


fun main() {
    var a = 10
    var b = 20

    if (a > b)
        println("a가 더 크며 값은 ${a}입니다.")
    else if (a < b)
        println("b가 더 크며 값은${b}입니다.")
    else
        println("a와 b의 값이 같습니다.")
}

if문은 if 구문으로 1차로 해당하는 값을 거르고
더 필요한 경우 2차, 3차, 4차...  else if로 거르고
마지막으로 else 구문을 사용시 if, else if문에서 걸린 값을 제외한 
나머지 값 전부가 포함 됩니다.



when문

코틀린의 when문은 자바에서의 switch case문과 유사합니다.

쉬운 예로 동전 분류기를 들겠습니다.
1원이 가장 작고 그 다음으로 10원 다음으로 100원 순으로 크기가 커진다면, 
수많은 동전을 투입구에 쏟은 뒤, 동전을 내려보낼때 작은 크기 순으로 구멍을 뚫는다면
작은 순서대로 분류가 될 것 입니다.

동전
V
투입구

동전ㅣ1원 > 1원 적립
V                               .
동전ㅣ10원 > 10원 적립
V                               .
동전ㅣ100원 > 100원 적립

간단한 코드는 아래와 같이 나타납니다.

fun main() {
    var coin =100

    when(coin){
        1 ->
            println("1원 입니다~")
        10 -> {
            println("10원 입니다~")
        }
        50,100 ->
            println("50원과 100원 중 하나 입니다`")
        else ->
            println("500원 입니다~")
        }
}



일정한 범위를 지정 할때 10,20,30,40,50 힘들게 해당하는 범위를
전부 지정할 필요는 없습니다.
코틀린에서는 간단히 범위를 지정할 수 있는 문법을 게공해 줍니다.



fun main() {

    var a=10
    when(a){
        in 1..10 ->
            println("a의 값은 ${a} 이며 1이상 10이하입니다.")
        !in 1..10 ->
            println("a의 값은 ${a} 이며 1이상 10이하의 범위에 포함되지 않습니다.")
    }
}
코틀린에서는 '..' 키워드를 이용해 간단하게 범위를 표현 할 수 있습니다.

인자가 없는 when문 또한 존재 합니다.


fun main() {

    var score =93

    when{
        score >=90 ->
            println("90이상 입니다.")
        score in 80..89 ->
            println("80이상 89이하 입니다.")
        score <80 ->
            println("79이하 입니다.")

    }

}
인자가 없는 when문에서는 조건식을 사용할 수가 있습니다.


while문

while문은 조건식이 true로 만족을 할 경우 본문 내용을 무한히 반복하는 구문입니다.
조건식을 완료해 조건식의 값이 false가 된다면 더이상 내용을 반복하지 않고
while문을 빠져나가게 됩니다.


fun main() {
    var a =0;
    while (a <5){
        println("a 값은 ${a} 입니다.")
        a ++
    }
}

위의 while문은 변수 a의 값을 0으로 설정하고 while문을 통해 a의 값을 출력한 뒤 값을 증가시키고 다시 반복시키는 구문입니다.
단,  조건식에서 변수 a의 값이 5미만이라 명시를 해두었으므로 a의 값이 5가 되는 순간 while문의 조건식은 만족하지 못해 false값이 들어와 while문이 종료되게 됩니다.

do while문

기존의 while문은 처음 조건식에 따라 while문을 실행할지 안할지 정해졌습니다.
그러나 do while문은 먼저 본문을 한번만 먼저 실행한 뒤 그 후에 조건식을 확인하고 조건식이 true값이면 기존과 같이 while문을 실행하며 false값이면 바로 빠져나오게 됩니다.

즉, do while문은 조건식이 참이든 거짓이든 무조건 while내의 구문을
 최소 '1'회 실행하게 됩니다.


fun main() {
    var a =0
    do {
        println("do while문, 값은 ${a} 입니다.")
        a ++
    }
        while (a <5)
}

do while문의 조건식이 참일 경우, 먼저 do문 내의 본문 내용을 먼저 실행합니다.
그후 밑으로 내려가 while내의 조건식에 따라 do문 내의 본문을 실행합니다.


fun main() {
    var a =0
    do {
        println("do while문, 값은 ${a} 입니다.")
        a ++
    }
        while (a >5)
}

위의 코드는 앞서 살펴본 코드와 유사하지만 다른점이 있습니다.
먼저 do문 내의 코드는 동일해 값은 값을 출력합니다.
그러나 while문을 보면 조건식이 다름을 확인할 수 있습니다.

바로 참과 거짓입니다.

앞서 살펴본 코드는 조건식이 참이지만 방금 살펴본 코드는 조건식이 거짓입니다.
따라서 do while구문은 본문을 반복하지 않고 바로 빠져나오게 됩니다.

for문


for문은 변수를 조건식에 따라 값은 올리거나 내리는 작업을 반복하는 구문입니다.
그러나 코틀린의 for문은 자바의 for문과는 문법에서 조금 차이가 납니다.

기존 자바에서는
int a =0;
int b =10;
for(a ;a <=b ;a++) {
      System.out.println(a);
}
이런식으로 for문을 표현했습니다.

코틀린에서의 for문을 보자면
fun main() {

    for(a in 0..5){
        println(a)
    }

}
자바와는 달리 표현식이 직관적이며 간단해 졌습니다.

간단한 코드지만 풀이를 해보면 정수인 변수 a의 값을 0부터 출력을 하고 출력 후 값을 하나씩 증가 시키며 값이 5에 도달 했을 경우 출력을 끝으로 종료되는 구문입니다.

값을 올리는 연산이 있으면 당연히 값을 내리는 연산도 존재 합니다.


fun main() {

    for(a in 5 downTo 0){
        println(a)
    }
}
바로 downTo키워드 입니다.
downTo키워드를 사용하면  값을 올렸던 기존과는 반대로 값을 내리는 작업을 할 수 있습니다.


값을 나타낼때 값을 하나씩만 올리고 내리는 방법만 있는게 아닙니다.
증감 값을 한번에 2개나 3개 혹은 그 이상으로 한번에 값을 바꿀 수가 있습니다.
먼저 코드를 보겠습니다.


fun main() {
    println("증가 연산")
    for(a in 0 .. 5 step 2){
        println(a)
    }

    println("감소 연산")
   for(a in 5 downTo 0 step 3){
        println(a)
    }
}
위의 코드는 a의 값을 0부터 5까지 올리는 대신 한번에 2개의 값을 올리는 작업입니다.
아래는 위의 코드와 비슷하지만 a의 값을 5부터 0까지 한번에 3개씩 내리는 작업입니다.


여기까지 코틀린에서의 흐름 제어에 대해 살펴보았습니다.
이전 포스팅에서 같이 살펴본 내용들인 연산자와 이번 포스팅에서 살펴본
흐름 제어를 이용하면 다양한 코드를 구사할 수 있습니다.

특정 알고리즘이나 자신만의 코드로 알고리즘을 구상해 자신이 원하는 코드를 구사해보세요.
다음 포스팅에서는 이번 포스팅에서 살펴보지 않은 고급 문법들을 살펴보겠습니다.




댓글

이 블로그의 인기 게시물

Google Map(구글 지도 사용하기)