TIL/Kotlin

[TIL/Kotlin] 코틀린 기초문법_흐름 제어(조건문과 반복문, Label)

야리니 2023. 5. 5. 18:18
728x90
반응형

1. 조건문 - if 와 if-else, if와 else의 중첩

if(조건)에서 조건이 true인 경우 if 문 안으로 들어와 if 문 안에 있는 문장을 실행시킨다.

fun main(args: Array<String>): Unit
{
    var a = 15
    val b = 11

    if(a > b)
    {
        println("if 안으로 들어옴")
        a -= b
    }

    println(a)
}

 

if(조건)이 true인 경우 if 문 안에 있는 문장을 실행시키고 false인 경우 else 안에 있는 문장을 실행시킨다.

fun main(args: Array<String>): Unit
{
    val a = 10
    val b = 5

    if(a < b)
        println("if")
    else
        println("else")

    if(a > b)
        println("a가 크다")
    else
        println("b는 a 이상이다.")
}

 

if와 else를 중첩하여 사용이 가능하다.

fun main(args: Array<String>): Unit {
    val score = 88

    if (score >= 90) {
        println('A')
    } else if (score >= 80) {
        println('B')
    } else if (score >= 70) {
        println('C')
    } else {
        println('F')
    }

}

2. if-else를 표현식으로 사용하기

if와 else가 모두 갖춰져 있으면 if-else 부분 전체가 표현식이 된다.

자바에서는 삼항 연산자가 있지만 코틀린에서는 if-else를 표현식으로 사용이 가능하므로 삼항 연산자가 존재하지 않는다.

if-else 블록이 비어있거나 마지막 문장이 표현식이 아니라면 Unit 타입이 되어 의미 없는 값이 저장된다.

fun main(args: Array<String>): Unit {
    val value: Int = if(10 > 5) {
        println("10은 5보다 크다.")
        10
    } else {
        println("10은 5보다 크지 않다.")
        5
    }

    println(value)

    // if-else 블록이 비어있거나 마지막 문장이 표현식이 아니라면 Unit 타입이 된다.
    val a = if(10 > 5) {}
    else {}

    val b = if(10 > 5) {
        val c = 10
    } else {
        val d = 5
    }

    println(a) // kotlin.Unit
    println(b) // kotlin.Unit
    // println(c) // 변수 생성이 되지 않음
    // println(d) // 변수 생성이 되지 않음
}

3. 조건문 - when

when은 자바의 switch-case를 훨씬 업그레이드 한 버전이다.

아래와 같은 형태로 사용한다.

when(타깃 표현식) {
        타킷 표현식과 비교할 값 -> {
            N개의 문장
        }
    }

 

샘플 코드는 다음과 같다.

fun main(args: Array<String>): Unit {

    val score = 64

    when(score / 10) {
        6 -> {println('D')}
        7 -> {println('C')}
        8 -> {println('B')}
        9, 10 -> {println('A')}
        else -> {println('F')}
    }

    println("test")

}

4. when을 표현식으로 사용하기

when도 if처럼 else 블록을 포함하고 있다면 표현식으로 사용이 가능하다.

fun main(args: Array<String>): Unit {
    val score = 95

    val grade: Char = when(score / 10) {
        6 -> 'D'
        7 -> 'C'
        8 -> 'B'
        9,10 -> 'A'
        else -> 'F'
    }

    println(grade) // A

    // when을 아래와 같이 사용할 수 있다(if-else처럼)
    val grade2: Char = when{
        score >= 90 -> 'A'
        score >= 80 -> 'B'
        score >= 70 -> 'C'
        score >= 60 -> 'D'
        else -> 'F'
    }

    println(grade2) // A

}

5. 반복문 - while

while은 특정 문장을 반복할 때 사용하는 키워드로 형태는 다음과 같다.

while(Boolean 표현식) {
   while에 포함시킬 문장들
}

 

샘플 코드는 다음과 같다.

반복 조건을 엉뚱하게 지정하면 무한 루프에 빠질 수 있으니 항상 주의하자!

fun main(args: Array<String>): Unit {
    var i = 1

    while(i < 10) {
        println(i)
        i += 1
    }
}

6. 반복문 - do-while

do-while문은 문장 마지막에서 조건을 검사하므로 do-while 블록은 적어도 한번은 무조건 실행된다.

아래 샘플 코드를 실행시키면 실행됨이 출력된다.

// 사용 형태
do {
  do-while에 포함시킬 문장들
} while(Boolean 표현식)


fun main(args: Array<String>): Unit {
    var i = 1
    do {
        println("실행됨")
    } while(i == 0)
}

7. 레이블(Label)

break는 가장 가까운 반복문을 탈출하게 되는 데 레이블을 사용해서 특정 반복문을 탈출할 수 있게 해준다.
break 뒤에 @레이블명으로 지정 후 레이블명@특정반복문을 지정

fun main(args: Array<String>): Unit {
    var x = 0
    var y = 0

    outer@ while(x <= 20) { 
        y = 0
        while(y <= 20) {
            if(x + y == 15 && x - y == 5) {
                break@outer // 11 라인에 있는 반복문을 탈출
            }
            y += 1
        }
        x += 1
    }

    println("x: $x, y: $y")

// ------------------------
    var z = 0
    var k = 0

    test@ while(z <= 20) {
        k = 0
        while(k <= 20) {
            if(z + k == 15 && z - k == 5) {
                break@test
            }
            k += 1
        }
        z += 1
    }

    println("z : $z, k : $k")
}

 

728x90
반응형