[TIL] 2023.11.22

Gahyeon Lee·2023년 11월 22일
0

TIL

목록 보기
6/47
post-thumbnail

코틀린의 조건문과 조건문에서 쓰일 수 있는 비교연산자들을 알아보자.

🐶조건문

조건문이란 특정 조건에 따라 실행을 달리하고자 할 때 사용한다.
코드의 흐름을 조건에 따라 바꿀 수 있기 때문에 제어문이라고도 한다.
제어문에는 크게 조건문에 해당하는 if, when, 그리고 반복문에 해당하는 for, while이 있는데 오늘은 조건문 if와 when에 대해 알아보자.

▶️조건문의 기본 if문

만약 ~한다면이라는 말 그대로 if문에 주어진 값이 '참' 이라면 따라오는 구문을 실행하는 기능이다.

먼저 조건을 테스트하기 위해 a라는 변수를 하나 만들어 정수 7을 넣고 if문으로 a와 10을 비교하는 조건식을 쓴다음, 이 조건식이 참인 경우에 실행할 println을 중괄호를 치고 써보자.

fun main() {
	var a = 7
    if(a > 10) {
    	println("a는 10보다 크다")
    }
}

{중괄호}를 치는 이유는 함수처럼 조건문에서도 실행할 구문이 여러개가 될 수도 있기때문인데, 하나 뿐이라면 {}를 생략해도 된다.

실행해 보면 a가 7이므로 10보다 크다라는 조건이 거짓이기 때문에 아무것도 실행되지 않는다.

하나의 if문으로 거짓인 경우까지 커버하려면 if문이 실행되는 구문 뒤에 else를 붙이고 조건이 거짓일 때 실행할 구문을 써주면 된다. 다시 실행해 보면 거짓일 때 표시할 문자열이 나타난다.

fun main() {
	var a = 7
    if(a > 10) {
    	println("a는 10보다 크다")
    } else {
    	println("a는 10보다 작거나 같다")
    }
}

조건을 참으로 만들기 위해 a값을 11로 바꿔보면 참인 경우에 표시할 문자열이 나타난다. 이렇게 특정 코드를 실행하거나 실행하지 않을 때 조건문을 사용할 수 있다.

즉, if문은 주어진 조건식의 결괏값이 참인지 거짓인지에 따라 코드를 실행할 것인지 혹은 다른 코드를 실행할 것인지 판단하기 위한 프로그래밍 문법이다. 참과 거짓의 조건은 밑에서 설명할 '비교 연산'을 통해 구할 수 있다.

if 문의 조건식에는 비교 연산자(==, <, >)와 논리 연산자(&&, ||)를 사용한 조건식만 사용 가능하며, 조건식의 결과는 Boolean 타입인 ture(참)와 false(거짓)로 나타난다.

▶️ 다중 조건문 when

다른 언어에서 지원하는 switch문을 좀 더 편리하게 바꾼 기능이다.(다른 언어에서의 switch문은 if문과 비교하자면, if문과 다르게 연산식에서 사용되는 비교 연산자 중에 ==만 사용해서 같은 값인지를 비교하는 조건문으로 선택문이라고 불린다.)

switch (변수) {
	case 비교값 : 
    	// 변숫값이 비교값과 같다면 이 영역이 실행됨
}

if가 참과 거짓만을 비교할 수 있는 반면, when은 하나의 변수를 여러 개의 값과 비교할 수 있다는 장점이 있다. 또한 코틀린의 when은 switch문과 다르게 같은 값뿐만 아니라 범위 값도 처리할 수 있고 사용 방법도 더 많다.

일반적인 형태의 when문을 사용하려면 when 다음에 (괄호)를 작성하고 괄호 안에는 주로 비교 대상 파라미터로 사용할 변수명을 입력한다. if에서처럼 괄호 다음에 {중괄호}를 사용해서 when 블록을 구분하고 블록 내부에서 비교할 값은 화살표 연산자(Arrow operator, ->)를 사용해서 선택한다.

when(파라미터) {
	비교값 -> {
    	//변숫값이 비교값과 같다면 이 영역이 실행됨
    }
}
  • 괄호 안에 특정 변수를 할당하는 것을 파라미터라고 한다.

다른 언어의 switch 문과 비교하면 값을 비교하는 줄 앞의 case가 없어지고 비교값 다음의 콜론이 화살표 연산자로 대체되었다.

when(파라미터) {
	비교값1 -> {
    	//변수의 값이 비교값1과 같다면 이 영역이 실행됨
    }
    비교값2 -> {
    	//변수의 값이 비교값2와 같다면 이 영역이 실행됨
    }
    else -> {
    	//변수의 값이 앞에서 비교한 값들과 다르면 이 영역이 실행됨
    }

범위 값을 비교하려면 in을 사용하여 if문의 비교 연산자 중 <=, >=과 같은 기능을 구현할 수 있다.

var ageOfMichael = 19
when (ageOfMichael) {
	in 10..19 -> {
    Log.d("When", "마이클은 10대입니다")
    }
    !in 10..19 -> {
    	Log.d("when", "마이클은 10대가 아닙니다.")}
    }
}

when문을 유연하게 테스트해 보기 위해 패러미터를 받아 when에 넣어주는 doWhen 함수를 만들어보자.
이 때 패러미터 a는 Any라는 자료형을 사용하는데, 이는 어떤 자료형이든 상관없이 호환되는 코틀린의 최상위 자료형이다.
doWhen 함수에 when 구문을 만들고 패러미터로 받아온 a를 넣은 후 중괄호 안에 a와 비교할 조건값들을 나열한다. 숫자값, 문자열, is나 !is 연산자도 사용이 가능하다. 그리고 위의 어떤 조건값에도 맞지 않는 경우 실행할 else문도 있다. 다만, 등호나 부등호의 사용은 불가능하다!!
이 때 여러개의 조건이 맞을 경우에도 먼저 부합하는 조건이 실행되는 것을 유의하자!

fun main() {
}
fun doWhen (a: Any) {
	when(a){
    	1 -> println("정수 1입니다")
        "우리 집 강아지" -> println("귀여워")
        is Long -> println("Long 타입입니다")
        !is String -> println("String 타입이 아닙니다")
        else -> println("어떤 조건도 만족하지 않습니다")
    }
}

이제 main 함수에서 doWhen 함수에 다양한 값을 넣어가며 테스트 해보자.

fun main() {
	doWhen(1)
    doWhen("우리 집 강아지")
    doWhen(12L)
    doWhen(3.65329)
    doWhen("Kotlin")
}
fun doWhen (a: Any) {
	when(a){
    	1 -> println("정수 1입니다")
        "우리 집 강아지" -> println("귀여워")
        is Long -> println("Long 타입입니다")
        !is String -> println("String 타입이 아닙니다")
        else -> println("어떤 조건도 만족하지 않습니다")
    }
}

위의 예제는 when을 조건에 맞는 동작을 하는 조건문으로서 이용한 경우인데, when의 조건이 맞을 때 동작 대신 값을 반환하는 표현식(expressions)으로서의 역할을 하게 하려면 아래와 같이 when의 조건으로 동작대신 값을 써주면 된다. 이렇게 하면 when의 결과를 변수에 할당하거나 직접 값으로서 사용할 수 있다. when에서 결과를 변수에 받아 출력해보면 의도대로 동작하는 것을 볼 수 있다.

fun main() {
	doWhen(1)
    doWhen("우리 집 강아지")
    doWhen(12L)
    doWhen(3.65329)
    doWhen("Kotlin")
}
fun doWhen (a: Any) {
	var result = when(a){
    	1 -> "정수 1입니다"
        "우리 집 강아지" -> "귀여워"
        is Long -> "Long 타입입니다"
        !is String -> "String 타입이 아닙니다"
        else -> "어떤 조건도 만족하지 않습니다"
    }
    println (result)
}
  • 사용하려는 값을 특정할 수 있고 값의 범위가 넓지 않다면 when 문을 사용하는 것이 더 좋은 방법이다. 반대로 범위가 넓고 값을 특정할 수 없을 경우에는 if문을 사용하는 것이 더 좋다.


🐶비교연산자(comparison operators)

부등호

  • < : 작다
  • <= : 작거나 같다
  • '>' : 크다
  • '>=' : 크거나 같다
  • != : 같지 않다
  • == : 같다(등호)
    등호는 수학에서와 달리 =을 2개 써서 우측의 값을 좌측 변수에 할당하는 할당연산자(=)와 구별한다.
a = 7   --> 7이라는 값을 a라는 변수에 넣겠다는 의미
  • is : 자료형이 맞는지 체크
    is 연산자 좌측에 변수를 쓰고 우측에 확인할 자료형을 쓰면 좌측 변수가 우측 자료형에 호환되는지 여부를 체크하고 형변환까지 한번에 진행시켜주는 연산자
a is Int
  • !is : 자료형이 틀린지 체크(!가 not을 의미)

프로그램은 조건에 따라 판단하여 수행시켜야 하는 경우가 많다. 따라서 코틀린에서 조건문은 코드의 중요한 기반이 되니 잘 익혀두자.
profile
코린이 강아지 집사🐶

0개의 댓글