프로그래밍 언어/Kotlin

[코틀린 기초] if문 / for, while 문 / when 문

코딩하는흑구 2022. 9. 21. 16:38

if 문

가장 기본적인 형태의 if 문

val job = "Backend Developer"

if (job == "Backend Developer") {
    println("백엔드 개발자")
} else if (job == "Frontend Developer") {
    println("프론트엔드 개발자")
} else {
    println("개발자 아님")
}

 

if문은 표현식이다. 따라서 Java에서와는 다르게 동작한다. 대입이 가능하다.

val age : Int = 10

val str = if (age > 10) {
    "성인"
} else {
    "아이"
}

자바에서는 str = "성인", str = "아이" 처럼 if문 안에 대입문을 넣어주었어야 할텐데 코틀린에서는 표현식으로 동작하기 때문에 위와 같은 대입식이 가능하다.

 

코틀린은 삼항연산자가 없다. 하지만 if else가 표현식처럼 동작하기 때문에 불필요해서 없다.

val num1 = 1
val num2 = 2
val result = if (num2 > num1) num2 else num1 // 해당 코드가 삼항연산자처럼 동작한다.

for 문

범위 연산자

for (i in 0 .. 3) {
    println(i)
} // 0 1 2 3

 

until 연산자 : until 뒤에 오는 숫자는 포함하지 않는다.(미만)

for (i in 0 until 3) {
    println(i)
} // 0 1 2

 

step 연산자 : 값을 증가시킨다.

for (i in 0 .. 6 step 2) {
    println(i)
} // 0 2 4 6

 

downTo 연산자 : 값을 감소시킨다.

for (i in 3 downTo 1) {
    println(i)
} // 3 2 1

 

Array 반복

val numbers = arrayOf(1,2,3)
for(i in numbers) {
    println(i)
} // 1 2 3

while 문

자바에서의 while문과 동일하다. 조건을 확인한 후 true 면 코드를 실행하고 false 면 코드를 실행하지 않는다.

var x = 5
while (x > 0) {
    println(x)
    x--
} // 5 4 3 2 1

when 문

자바에서 switch case를 활용했을 때와 비슷한 동작을 한다.

val value = 2

val result = when (value) {
    1 -> "첫번쨰"
    2 -> "두번쨰"
    3 -> "세번쨰"
    4 -> "네번째"
    else -> "기타"
}
println(result) // "두번째"

 

만약 아래와 같은 enum 클래스가 있다면!

enum class Developer {
    BACKEND, FRONTEND
}
when(getDeveloper()) {
    Developer.BACKEND -> println("backend")
    Developer.FRONTEND -> println("frontend")
}

when 절을 활용할 때 else를 생략할 수 있습니다. 왜냐하면 Developer enum 클래스에는 BACKEND, FRONTEND 값만 존재하기 때문에 코틀린 컴파일러가 이에 대해서 추론할 수 있도록 제공합니다.

 

만약 NATIVE라는 타입을 추가한다면..?

enum class Developer {
    BACKEND, FRONTEND, NATIVE
}

when 절에서 컴파일 에러가 발생합니다. NATIVE 케이스를 추가하거나 else를 두라고 합니다.

 

또한 코틀린에서의 when 절은 여러개의 조건을 콤마(,)로 구분해서 한줄에 정의할 수도 있습니다.

fun main() {
    when(getNumber()) {
    	1, 2 -> println("첫번째 혹은 두번째")
        else -> println("그 외.")
    }
}

fun getNumber() = 2

 

해당 게시물은 아래의 강의를 토대로 작성된 예제입니다.

https://fastcampus.co.kr/courses/211160