Kotlin 제어문 다루는 방법

코틀린을 배우기 위해서 인프런에서 강의를 구매하고 코틀린과 친해지고 기본기를 다지기 위해서 공부하는 중이다. 글 내용을 제어문을 다루는 방법이고 강의는 최태현님의 자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)에 소금을 조금 친 내용이다

if문 – Expression vs Statement

Java vs Kotlin

// Java - Statement (값 반환 불가)
if (score >= 50) {
    return "P";
} else {
    return "F"
}

// Kotlin - Expression (값 반환 가능)
fun getPassOrFail(score: Int): String {
    return if (score >= 50) "P" else "F"
}

Expression(표현식): 하나의 값으로 평가되는 코드

1 + 2 // 3으로 평가
"Hello" // "Hello"로 평가
if (a > b) a else b // 더 큰 값으로 평가

Statement(문장): 값을 반환하지 않고 작업을 수행하는 코드

val x = 5 // 변수 선언
println(x) // 출력 작업

범위 연산자와 in

// 범위 검증
fun validateScoreInRange(score: Int) {
    if (score in 0..100) {
        println("점수가 0부터 100사이에 있습니다")
    }
}

funvalidateScoreNotInRange(score: Int) {
    if (score !in 0..100) {
        throw IllegalArgumentException("점수 범위는 0부터 100입니다")
    }
}

when문 – swtich의 강력한 대안

// Java
 private void judgeNumber(int number) {
    if (number == 1 || number == 0 || number == -1) {
        System.out.println("어디서 많이 본 숫자입니다");
    } else {
        System.out.println("1, 0, -1이 아닙니다");
    }
}

private String getGradeWithSwitch(int score) {
    return switch (score / 10) {
        case 10, 9 -> "A";
        case 8 -> "B";
        case 7 -> "C";
        case 6 -> "D";
        default -> "F";
    };
}

// Kotlin
// 값 매칭
fun judgeNumber(number: Int) {
    when (number) {
        1, 0, -1 -> println("어디서 많이 본 숫자입니다")
        else -> println("1, 0, -1이 아닙니다")
    }
}

// 범위 매칭
fun getGradeSwitch(score: Int): String {
    return when (score) {
        in 90..100 -> "A"
        in 80..89 -> "B"
        in 70..79 -> "C"
        in 60..69 -> "D"
        else -> "F"
    }
}

조건 없는 when

// Java
private void judgeNumber(int number) {
    if (number == 0) {
        System.out.println("주어진 숫자는 0입니다");
        return;
    }

    if (number % 2 == 0) {
        System.out.println("주어진 숫자는 짝수입니다");
    return;
    }

    System.out.println("주어진 숫자는 홀수입니다");
}


// Koltin
fun judgeNumber2(number: Int) {
    when {
        number == 0 -> println("주어진 숫자는 0입니다")
        number % 2 == 0 -> println("주어진 숫자는 짝수입니다")
        else -> println("주어진 숫자는 홀수입니다")
    }
}

타입 체크 (is)

// Java
private boolean startsWithA(Object obj) {
    if (obj instanceof String) {
        return ((String) obj).startsWith("A");
    } else {
        return false;
    }
}

// Koltin
fun startWithA(obj: Any): Boolean {
    return when (obj) {
        is String -> obj.startsWith("A")
        else -> false
    }
}

when문의 주요 특징

  • Expression으로 사용 가능 – 값 반환
  • break 불필요 – 자동으로 분기 종료
  • 다양한 조건 지원
    • 값: 1, 2, 3
    • 범위: in 0..100
    • 타입: is String
    • 조건: number > 0
  • 조건 없는 when은 when {} 형태로 사용하며, 각 분기에서 Boolean 조건을 직접 평가. 복잡한 if-else if 체인을 더 깔끔하게 표현할 수 있고 가독성이 향상된다

Kotlin의 제어문은 Expression 기반으로 더 간결하고 표현력이 뛰어나며, when문은 강력하고 유연하다

출처 – 인프런 강의 중 자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)