프로그래밍 언어/코틀린

코틀린 8. 조건문

닉네임못짓는사람 2020. 12. 22. 19:53
반응형

이번 글에서는 코틀린의 조건문에 대해서 알아보도록 하겠습니다.

조건문


조건문이란 특정한 조건에 따라서 프로그램의 흐름을 제어하는 문법입니다.

예를 들어 도어락을 생각해봅시다.

이 도어락은 출입자가 맞는 비밀번호를 입력하면 문을 열고, 틀린 번호를 입력하면 문을 열지 않습니다.

 

여기서 출입자가 입력한 비밀번호가 맞는 비밀번호인가? 가 조건이 되는 것이고,

참일 때 행하는 것이 문을 연다. 거짓일 때 행하는 것이 문을 열지 않는다.이며 이 전체를 조건문이라고 하는 것입니다.

 

이렇게 간단한 예를 듣기만 해도 프로그래밍에서 조건문이 얼마나 중요한 역할을 하는지 바로 와 닿지 않나요?

조건문이 없다면 도어락이라는 기계 자체를 설계할 수가 없을 테니 말이죠.

그렇다면 이제 조건문이 무엇인지 알았으니 코틀린에서 사용하는 조건문은 무엇인지 알아봅시다.

if문


if문은 가장 흔하게 사용되는 조건문으로서 만약 ~한다면 ~을 한다. 라는 기본적인 문법을 제공합니다.

fun main() {
    var a = 10
    if(a > 5){
    	println("a는 5보다 큽니다.")
    }
    else{
    	println("a는 5보다 작거나 같습니다.")
    }   
}

위의 코드를 보시면, 일단 a라는 변수를 10으로 초기화합니다.

그리고 if문에서 a가 5보다 큰지 검사합니다. 이때 if문에 사용될 조건은 괄호()로 묶어주어야 합니다.

조건을 지정했다면 해당 조건이 참일 때 실행할 코드를 뒤의 중괄호{}안에 넣어줍니다.

이때 실행할 코드가 한 줄이라면, 중괄호를 생략하셔도 됩니다.

 

반대로 해당 조건이 거짓이라면 어떻게 할까요?

이때는 else라는 키워드를 사용하게 되는데, if문의 조건이 거짓일 경우 else이하 중괄호 안의 코드를 실행합니다.

 

그런데, 이렇게만 보면 조건을 참 또는 거짓으로만 나눌 수 있으니 매우 단조로워 보입니다.

때문에 프로그래밍 언어에서는 if~else if문을 지원하고 있습니다.

다시 코드로 돌아가 봅시다.

fun main() {
    var a = 3
    if(a > 5){
    	println("a는 5보다 큽니다.")
    }
    else if(a > 2){
        println("a는 5보다 작거나 같고, 2보다 큽니다.")
    }
    else{
    	println("a는 2보다 작거나 같습니다.")
    }   
}

else if문은 if문의 조건이 거짓일 때, 또 다른 조건을 다시 검사할 수 있는 문법입니다.

위의 코드에서 a는 5보다는 작거나 같지만, 2보다는 크기 때문에 else if문의 조건이 참이 되어 코드를 실행합니다.

 

주의해야 할 점은 else if문이 있다고 해서 모든 조건을 검사하는 것은 아니고, 조건식 검사는 가장 위의

if문부터 차례대로 실행되며, 도중에 하나라도 참인 조건이 있다면 해당 코드를 실행하고 if문을 종료한다는 점입니다.

 

이렇게 if문의 기본적인 구조를 알아봤으니 조건식에 대해서 좀 더 자세히 알아보도록 합시다.

비교 연산자


if문에서 조건을 검사할 때에는 주로 '비교 연산자'라는 것을 사용합니다.

비교 연산자는 어떠한 값들을 비교하여 그 결과가 참 또는 거짓인지 밝혀내는 연산자입니다.

 

수학에서 사용하는 <, >, =, 등등이 비교 연산자에 해당하는데, 다음과 같은 비교 연산자들이 있습니다.

1. <, <=, >, >= : 수학에서 사용하는 부등호와 동일한 의미입니다.

2. == : 프로그래밍 언어에서 =는 대입 연산자로 사용되기 때문에 두 값이 같은지 비교할 때에는 ==을 사용합니다.

3. is, !is : is의 경우 조건식에 들어간 두 데이터의 자료형이 일치하는지 검사하는 연산자입니다.

  is의 경우 두 데이터의 자료형이 같으면 참을, !is의 경우 두 데이터의 자료형이 다를 때 참을 반환합니다.(!가 not을 의미)

논리 연산자


이러한 비교 연산자들 말고도 조건문에 빠져서는 안 될 것이 있는데, 그것은 '논리 연산자'입니다.

조건문을 사용할 때 검사해야 할 조건이 단 하나라고 할 수는 없습니다.

 

예를 들어, 장학생을 정하기 위해 A과목과 B과목의 점수가 둘 다 80점 이상인 학생들을 골라낸다고 생각해봅시다.

이럴 때 if문을 통해 학생들을 고르려고 하면 기존의 방법으로는 먼저 A과목이 80점 이상인 학생들을 골라낸 뒤,

그중에서 B과목이 80점 이상인 학생들을 골라내도록 if문을 두 번 사용해야 할 것입니다.

fun main() {
    var a = 87
    var b = 76
    if(a >= 80)
    	println("a >= 80")
    if(b >= 80)
    	println("b >= 80")
}

대충 이런 식으로 말이죠.

하지만 이때 하나의 if문에서 이를 해결하는 방법이 있는데, 바로 논리 연산자 &&(AND)를 사용하는 것입니다.

AND연산자는 두 개의 조건식을 따로 검사해서 두 조건식이 모두 참일 때 결과로써 참을 반환합니다.

위의 코드를 AND연산자를 사용해 바꿔봅시다.

fun main() {
    var a = 87
    var b = 83
    if(a >= 80 && b >= 80)
    	println("장학생입니다.")
}

이런 식으로 두 조건식을 AND연산자를 사용해 연결시켜 하나의 답을 도출해낼 수 있습니다.

이러한 논리 연산자는 다음과 같은 종류의 것들이 있습니다.

1. &&(AND)연산자 : 두 조건식의 값이 모두 참이어야만 참을 반환한다.

2. ||(OR)연산자 : 두 조건식 중 하나라도 참이면 참을 반환한다.

3. !(NOT)연산자 : 조건식의 결과를 반전시킨다.(참->거짓, 거짓->참)

 

이러한 논리 연산자, 비교 연산자를 사용한 조건문을 통해 자신이 원하는 조건에 따라 프로그램을 제어할 수 있습니다.

when문


코틀린에서는 if문뿐만 아니라 when이라는 조건문을 하나 더 제공합니다.

이는 다른 프로그래밍 언어에서의 switch~case문과 비슷한 동작을 수행합니다.

 

when문은 하나의 데이터를 두고 이를 다른 값과 비교하여 일치하는 조건의 코드를 수행합니다.

말로는 이해하기 힘들 수도 있으니 바로 코드를 살펴봅시다.

fun main() {
    var a: Int = 10
    when(a){
        10 -> println("a = 10입니다.")
        'a' -> println("a = 'a'입니다.")
        is Int -> println("Int형 변수입니다.")
        else -> println("일치하는 조건이 없습니다.")
    }
}

이렇게 when문을 사용해서 a라는 변수의 값을 여러 값과 비교해서 코드를 실행할 수 있습니다.

여기서 중요한 점은 when문에서는 비교연산자를 사용하여 조건을 검사할 수는 없고,

a의 값을 직접적으로 다른 값과 비교하는 작업만 가능하다는 점입니다.

 

위의 코드에선 a가 10이기 때문에 첫 번째 줄인 "a = 10입니다."라는 코드가 실행되고 when문을 종료할 것입니다.

또한 when문에서도 if문처럼 모든 조건에 부합하지 않을 때 else문을 사용해서 코드 실행이 가능합니다.

 

그런데, 사실 위의 코드를 실행시켜보면 아래와 같은 오류가 발생합니다.

해당 에러는 본래 Int형인 a를 Char형과 비교하려고 했기 때문에 발생하는 오류입니다.

코틀린에서는 조건식에서 Char형과 정수의 직접적인 비교가 불가능합니다.

때문에 위의 오류를 해결하려면 코드를 아래와 같이 변경해주셔야 합니다.

fun main() {
    var a: Any = 10
    when(a){
        10 -> println("a = 10입니다.")
        'a' -> println("a = 'a'입니다.")
        is Int -> println("Int형 변수입니다.")
        else -> println("일치하는 조건이 없습니다.")
    }
}

여기서 변수 a를 Any라는 자료형으로 선언해주었는데, Any는 간단하게

코틀린의 모든 자료형의 최상위 자료형라고 생각하시면 될 것 같습니다.

 

Java의 object와 동일한 역할을 하는데, 이 Any는 Int와 Char를 모두 포함하고 있기 때문에

위의 when문에서 사용해주시면 코드가 정상적으로 작동하는 것을 확인할 수 있습니다.

 

이렇게 코틀린에서 사용하는 조건문이 if문과 when문에 대해서 알아봤는데요.

또 한 가지 알아둘 점은 모든 when문은 if~else if를 통해 대체가 가능하지만,

모든 if문을 when으로 대체할 수는 없다는 점입니다.

 

이번 글은 이 정도로 마치도록 하겠습니다.

감사합니다.

반응형

'프로그래밍 언어 > 코틀린' 카테고리의 다른 글

코틀린 10. 흐름제어  (0) 2020.12.23
코틀린 9. 반복문  (0) 2020.12.22
코틀린 7. Nullable변수  (0) 2020.12.21
코틀린 6. 함수  (0) 2020.12.21
코틀린 5. 배열  (0) 2020.12.21