본문 바로가기

개발

코틀린 Kotlin 다루기 (7) - 조건식

반응형

조건식

조건식은 조건에 따라 코드 실행을 하기 위한 문법입니다.

Java, C 등 다른 언어와 매우 흡사하며 다른 언어에서 써본 적이 있다면 쉽게 다룰 수 있습니다.

 

숫자를 입력 받으면 짝수, 홀수에 따라 다른 코드를 실행하거나 특정 퀘스트를 완료하면 작동하는 코드 등 모두 조건식으로 해결 할 수 있습니다.

If

if는 조건을 확인 할 수 있는 기초적인 문법입니다.

val a = 6
val b = 5

if(a > b) {
    println("변수 a가 변수 b보다 큽니다.")
}

a와 b를 비교하여 a가 b보다 큰 경우(a > b) 문구를 출력하는 코드입니다.

if 괄호 안에 조건을 쓸 수 있으며 해당 조건 만족 시 중괄호( {} ) 안에 포함된 코드가 작동됩니다.

 

이번에는 입출력까지 응용하여 입력받은 수가 홀수인지 짝수인지 알려주는 코드를 만들어봅시다.

val number = readLine()!!.toInt()
if(number % 2 == 0) {
    println("${number}은(는) 짝수입니다.")
}
if(number % 2 != 0) {
    println("${number}은(는) 홀수입니다.")
}

// 실행결과
// > 5
// 5은(는) 홀수입니다.
// > 10
// 10은(는) 짝수입니다.

짝수는 2로 나눴을 때 나머지가 0인 성질을 이용하여 조건을 만들었습니다.

 

위 코드에서는 짝수가 아니면 홀수 조건을 추가로 확인하여 출력해주었습니다.

짝수가 아니면 무조건 홀수일텐데 조건을 확인하지 않고 검사 할 수 있을까요?

Else와 Else If

else는 상위 조건을 만족하지 못했을 때 실행되는 문법입니다.

위에서 설명한 홀짝 구분하는 코드를 else를 이용하여 다시 바꿔봅시다.

val number = readLine()!!.toInt()
if(number % 2 == 0) {
    println("${number}은(는) 짝수입니다.")
} else {
    println("${number}은(는) 홀수입니다.")
}

이렇게 바꾸면 추가 조건 확인 없이 짝수가 아니라면 모두 else 문단으로 넘어갑니다.

이번에는 홀수이면 바로 홀수를 출력하지 않고 입력한 값이 51 이상일 때만 출력해봅시다.

val number = readLine()!!.toInt()
if(number % 2 == 0) {
    println("${number}은(는) 짝수입니다.")
} else {
    if(number >= 51) {
        println("${number}은(는) 51 이상인 홀수입니다.")
    }
}

// 실행결과
// > 2
// 2은(는) 짝수입니다.
// > 5
// 
// > 59
// 59은(는) 51 이상인 홀수입니다.

else 안에 if를 추가하면서 홀수이면서 51이상인 수를 알아낼 수 있습니다.

 

여기서 더 나아가서 else 문단과 51 이상을 구별하는 if를 합쳐봅시다.

 

else 대신에 else if() {} 를 쓰고 중괄호( {} )안에 조건을 써주면 상위 조건이 만족하지 않으면서 else if 조건일경우 실행됩니다.

val number = readLine()!!.toInt()
if(number % 2 == 0) {
    println("${number}은(는) 짝수입니다.")
} else if(number >= 51) {
    println("${number}은(는) 51 이상인 홀수입니다.")
}

// 실행결과를 예상해보세요!

 

위 예제처럼 중괄호 안 코드 내용이 한줄이라면 중괄호를 생략 할 수 있습니다.
예를 들어 else if(number >= 51) println("${number}은(는) 51 이상인 홀수입니다.") 처럼요!
하지만 과도한 사용은 가독성을 떨어뜨립니다.

문(Statement)이 아닌 식(Expression)

흔히 if는 으로 값을 반환하지 않습니다. 코틀린에서 if는 으로 값을 반환하여 보다 유연하게 사용 할 수 있습니다.

이 때문에 Kotlin에는 `조건 ? 참일 시 값 : 거짓일 시 값`과 같은 삼항연산자가 없고 if로 대체 할 수 있습니다.

변수 안에 if문을 넣는 식으로 쓸 수 있으며 한 문단의 마지막 구문(표현식)이 return(반환) 값이 됩니다.

 

위 코드를 다시 한번 응용하여 짝수이면 "짝수", 51이상 홀수는 "51" 문자열을 변수에 넣는 코드를 만들어봅시다.

val number = readLine()!!.toInt()
val oddNumber = if(number % 2 == 0) {
    "짝수"
} else if(number >= 51) {
    "51"
}

println("oddNumber 변수의 값: $oddNumber")

하지만 코드를 실행하게 되면'if' must have both main and 'else' branches if used as an expression 오류가 발생합니다. 위 코드에서는 51 미만인 홀수의 경우 조건을 만들지 않았기때문에 return 할 수 있는 값이 없습니다.

해결하기 위해 else를 추가하여 51 미만인 홀수의 경우 "홀수" 문자열을 변수에 저장해봅시다.

val number = readLine()!!.toInt()
val oddNumber = if(number % 2 == 0) {
    "짝수"
} else if(number >= 51) {
    "51"
} else {
    "홀수"
}

println("oddNumber 변수의 값: $oddNumber")

// 실행결과
// > 100
// oddNumber 변수의 값: 짝수
// > 7
// oddNumber 변수의 값: 홀수
// > 65
// oddNumber 변수의 값: 51

if뿐만 아니라 밑에서 배우게되는 when 또한 식입니다!

when에 관련된 예제는 밑에서 다루겠습니다.

When

만약 다른 언어에서 switch를 배웠다면 switch의 상위 호환 느낌입니다.

when 문법은 조건에 맞는 곳으로 분기 시키는 문법으로 if와 유사합니다.

먼저 if 문법을 배웠으므로 if로 숫자를 입력받고 특정 숫자이면 문자열을 출력하게 만들어봅시다.

val number = readLine()!!.toInt()
if(number == 1) {
    println("1 입력!")
} else if(number == 2){
    println("2 입력!")
} else {
    println("나머지 숫자 입력!")
}

// 실행결과
// > 1
// 1 입력!
// > 2
// 2 입력!
// > 3
// 나머지 숫자 입력!
// > 10
// 나머지 숫자 입력!

위 if를 이용한 간단한 예제입니다. 위 예제를 when으로 바꿔봅시다.

val number = readLine()!!.toInt()
when (number) {
    1 -> {
        println("1 입력!")
    }
    2 -> {
        println("2 입력!")
    }
    else -> {
        println("나머지 숫자 입력!")
    }
}

when 괄호() 안에는 값이 들어가며 밑 분기에서 그 값에 만족하는 조건을 찾아 실행합니다.

맞는 조건을 못찾았다면 else 분기에 있는 코드를 실행하게 됩니다.

 

number 변수의 값이 1, 2 일 때 모두다 같은 코드가 실행되게 하려면 콤마(,)를 이용하여 쓸 수 있습니다.

val number = readLine()!!.toInt()
when (number) {
    1, 2 -> {
        println("1 또는 2 입력!")
    }
    else -> {
        println("나머지 숫자 입력!")
    }
}

// 실행결과
// > 1
// 1 또는 2 입력!
// > 2
// 1 또는 2 입력!
// > 3
// 나머지 숫자 입력!
// > 10
// 나머지 숫자 입력!

 

when 또한 코드 문장이 한줄이면 괄호를 생략 할 수 있으며 식(Expression) 형태로도 쓸 수 있습니다.

 

when의 값을 생략 할 수도 있습니다. 생략을 하고 실행 코드가 한줄임으로 괄호까지 생략해봅시다.

val number = readLine()!!.toInt()
when {
    number == 1 -> println("1 입력!")
    number == 2 -> println("2 입력!")
    else -> println("나머지 숫자 입력!")
}

역시 실행하면 같은 결과를 볼 수 있습니다.

 

 

마무리

이번 강좌는 조건식(if, when)에 대해서 알아봤습니다.

다음 글에서는 반복문과 반복문에서 쓰이는 Ranges 연산자에 대해서 다루겠습니다.

 

오타 지적, 피드백 환영합니다!

모르는 부분이 있으면 질문 또한 환영합니다 :D

 

 

반응형