Notice
Recent Posts
Recent Comments
Link
250x250
반응형
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

백고등어 개발 블로그

코틀린 강의 3강: 연산자와 제어문 본문

코틀린 강의

코틀린 강의 3강: 연산자와 제어문

백고등어 2025. 10. 28. 17:37
728x90
반응형

3강: 연산자와 제어문

연산자

코틀린의 연산자는 자바와 유사하지만, 몇 가지 편리한 기능이 추가되었습니다.

산술 연산자

val a = 10
val b = 3

println(a + b)  // 13 (덧셈)
println(a - b)  // 7 (뺄셈)
println(a * b)  // 30 (곱셈)
println(a / b)  // 3 (나눗셈)
println(a % b)  // 1 (나머지)

증감 연산자

var count = 10
count++  // 후위 증가: 11
++count  // 전위 증가: 12
count--  // 후위 감소: 11
--count  // 전위 감소: 10

비교 연산자

val x = 5
val y = 10

println(x == y)   // false (같음)
println(x != y)   // true (같지 않음)
println(x > y)    // false (크다)
println(x < y)    // true (작다)
println(x >= y)   // false (크거나 같다)
println(x <= y)   // true (작거나 같다)

논리 연산자

val isAdult = true
val hasLicense = false

println(isAdult && hasLicense)  // false (AND)
println(isAdult || hasLicense)  // true (OR)
println(!isAdult)               // false (NOT)

in 연산자

코틀린의 in 연산자는 범위나 컬렉션에 값이 포함되어 있는지 확인합니다:

val age = 25
println(age in 20..30)  // true (20 이상 30 이하)

val name = "Kotlin"
println('K' in name)    // true

val numbers = listOf(1, 2, 3, 4, 5)
println(3 in numbers)   // true

범위 연산자

val range1 = 1..10        // 1부터 10까지 (10 포함)
val range2 = 1 until 10   // 1부터 9까지 (10 미포함)
val range3 = 10 downTo 1  // 10부터 1까지 역순
val range4 = 1..10 step 2 // 1, 3, 5, 7, 9 (2씩 증가)

if 표현식

코틀린의 if는 문(statement)이 아닌 표현식(expression)입니다. 즉, 값을 반환할 수 있습니다.

기본 사용법

val age = 20

if (age >= 18) {
    println("성인입니다")
} else {
    println("미성년자입니다")
}

if를 표현식으로 사용

val age = 20
val message = if (age >= 18) "성인" else "미성년자"
println(message)  // 출력: 성인

// 여러 줄의 코드도 가능 (마지막 값이 반환됨)
val result = if (age >= 18) {
    println("성인 확인 중...")
    "성인"
} else {
    println("미성년자 확인 중...")
    "미성년자"
}

삼항 연산자가 없는 이유

코틀린에는 자바의 삼항 연산자(? :)가 없습니다. if 표현식으로 충분히 대체할 수 있기 때문입니다:

// 자바: String result = (age >= 18) ? "성인" : "미성년자";
// 코틀린:
val result = if (age >= 18) "성인" else "미성년자"

when 표현식

when은 자바의 switch문을 대체하는 강력한 표현식입니다. 훨씬 더 유연하고 표현력이 뛰어납니다.

기본 사용법

val day = 3

when (day) {
    1 -> println("월요일")
    2 -> println("화요일")
    3 -> println("수요일")
    4 -> println("목요일")
    5 -> println("금요일")
    6, 7 -> println("주말")  // 여러 값 매칭
    else -> println("잘못된 입력")
}

when을 표현식으로 사용

val dayName = when (day) {
    1 -> "월요일"
    2 -> "화요일"
    3 -> "수요일"
    4 -> "목요일"
    5 -> "금요일"
    6, 7 -> "주말"
    else -> "알 수 없음"
}

조건식 사용

val score = 85

val grade = when {
    score >= 90 -> "A"
    score >= 80 -> "B"
    score >= 70 -> "C"
    score >= 60 -> "D"
    else -> "F"
}
println("학점: $grade")  // 출력: 학점: B

범위와 컬렉션 검사

val age = 25

when (age) {
    in 0..12 -> println("어린이")
    in 13..19 -> println("청소년")
    in 20..64 -> println("성인")
    else -> println("노인")
}

val x = 5
when (x) {
    in listOf(1, 3, 5, 7, 9) -> println("홀수")
    in listOf(2, 4, 6, 8, 10) -> println("짝수")
}

is를 사용한 타입 검사

fun describe(obj: Any): String = when (obj) {
    1 -> "숫자 1"
    "Hello" -> "인사말"
    is Long -> "Long 타입"
    is String -> "문자열: 길이는 ${obj.length}"
    else -> "알 수 없는 타입"
}

for 루프

범위를 이용한 반복

// 1부터 5까지 반복
for (i in 1..5) {
    println(i)  // 1, 2, 3, 4, 5
}

// 1부터 10까지 2씩 증가
for (i in 1..10 step 2) {
    println(i)  // 1, 3, 5, 7, 9
}

// 10부터 1까지 역순
for (i in 10 downTo 1) {
    println(i)
}

// 인덱스 포함 없이 반복 (until 사용)
for (i in 0 until 5) {
    println(i)  // 0, 1, 2, 3, 4
}

컬렉션 반복

val fruits = listOf("사과", "바나나", "오렌지")

for (fruit in fruits) {
    println(fruit)
}

// 인덱스와 함께 반복
for ((index, fruit) in fruits.withIndex()) {
    println("$index: $fruit")
}

while 루프

var count = 0
while (count < 5) {
    println(count)
    count++
}

// do-while: 최소 한 번은 실행
var input: String
do {
    print("종료하려면 'quit' 입력: ")
    input = readLine() ?: ""
} while (input != "quit")

break와 continue

// break: 루프 종료
for (i in 1..10) {
    if (i == 5) break
    println(i)  // 1, 2, 3, 4
}

// continue: 현재 반복 건너뛰기
for (i in 1..5) {
    if (i == 3) continue
    println(i)  // 1, 2, 4, 5
}

레이블을 사용한 break/continue

중첩 루프에서 외부 루프를 제어할 수 있습니다:

outer@ for (i in 1..3) {
    for (j in 1..3) {
        if (i == 2 && j == 2) break@outer
        println("$i, $j")
    }
}

마치며

이번 강의에서는 코틀린의 연산자와 제어문에 대해 알아보았습니다. 특히 if와 when을 표현식으로 사용할 수 있다는 점, when이 자바의 switch보다 훨씬 강력하다는 점을 기억하세요. 다음 강의에서는 함수와 람다 표현식에 대해 알아보겠습니다.

728x90
반응형