개발자의 생활

조건문, 반복문 (연산자) 본문

kotlin(코틀린) 강좌

조건문, 반복문 (연산자)

Developer성현 2024. 9. 9. 09:03

이번에는 프로그래밍에서 빠지면 안 되는 필수적인 존재 조건문, 반복문 그리고 연산자에 대해 알아보겠습니다.

 

1. 조건문

코틀린에서 조건문에는 if와 when 이 있습니다.

 

1. if문

코틀린에사 if 조건문은 다른 언어와 사용법이 비슷하지만 추가적인 기능이 있습니다.

fun main() {
    if(false){
        println("참")
    }else{
        println("거짓")
    }

    if(false){
        println("1")
    }else if(false){
        println("2")
    }else{
        println("3")
    }
}

일반적인 다른 언어와 동일하게 사용이 가능합니다.

하지만 코틀린에서는 추가적인 기능이 있습니다. 재미있게도 if문을 통해 값을 반환할 수도 있습니다.

코드를 보겠습니다.

fun main() {
    val a = if(true){
        "참"
    } else {
        "거짓"
    }

    println(a)
}

이처럼 내부 데이터를 조건에 따라 값을 반환하여 변수에 담을 수 있습니다.

다만 반환값을 가지기 위해서는 else 가 1개 이상 있어야 합니다. 조건이 false 일 경우에 반환 데이터를 가져오지 못하기 때문이겠네요

코드를 보니 마치 삼항 연산자를 합쳐놓은 느낌이네요 하지만 코틀린의 if문 쪽이 더 유연하고 편리한 거 같습니다. 

 

2. when

when 은 다른 언어에서 switch와 비슷하지만 이또한 if문처럼 유연하면서 몇 가지 기능이 추가된 조건문입니다.

fun main() {
    dataCheck(1)
    dataCheck(5)
    dataCheck(10)
    dataCheck("text")
    dataCheck("a")
}

fun dataCheck(data: Any){
    when(data){
        1 -> println("1 입니다.")
        is Int -> println("Int형 입니다.")
        10 -> println("10 입니다.")
        "text" -> println("text 입니다.")
        else -> println("없음")
    }
}

실행 결과

일단 다양한 데이터를 테스트하기 위해 함수를 만들고 Any타입으로 파라미터를 받아 조건을 비교할 수 있도록 구성하였습니다.

사용법은 switch와 비슷하지만 구성이 조금 다릅니다. 가장 먼저 case문이 없이 비교할 데이터를 입력하시면 됩니다. 그리고 : 대신 ->를 이용해서 실행구문과 구별을 하시면 됩니다. 그리고 일반적으로 switch문은 조건이 참이면 그다음부터 계속 실행되기 때문에 break문으로 멈춰주어야 했지만 Any은 처음 조건이 만족하면 해당 실행문만 실행하고 넘어가게 됩니다.

 

만약 실행할 코드 라인이 더 있다면

1 -> {
    print("1 ")
    println("입니다.")
}

이런 식으로 중괄호로 감싸면 됩니다.

 

when도 if문처럼 값을 반환할 수 있습니다.

fun main() {
    dataCheck(1)
    dataCheck(5)
    dataCheck(10)
    dataCheck("text")
    dataCheck("a")
}

fun dataCheck(data: Any){
    val str = when(data){
        1 -> "1 입니다."
        is Int -> "Int형 입니다."
        10 -> "10 입니다."
        "text" -> "text 입니다."
        else -> "없음"
    }

    println(str)
}

이처럼 when이 반환한 값을 변수에 담을 수도 있습니다.

 

***추가로 is는 추후에 자세히 알아보겠지만 데이터 타입을 확인하는 키워드입니다.

 

2. 반복문

코틀린에서도 for문 while, do while문 이 있습니다.

 

1.for

for문은 c, java 등의 언어에서 사용하는 방법이 다릅니다. 다른 언어에서는 (초기식, 조건식, 증감식)으로 구분하였지만 코틀린에서는 혼합되면서 간소화되었습니다.

fun main() {
    //0 ~ 10까지 반복(1씩 증가)
    for(a in 0..10){
        print("$a ")
    }

    println()//분 바꿈

    //0 ~ 10까지 반복(2씩 증가)
    for(a in 0..10 step 2){
        print("$a ")
    }

    println()//분 바꿈

    //10 ~ 0 까지 반복(1씩 감소)
    for(a in 10 downTo 0){
        print("$a ")
    }

    println()//분 바꿈

    //10 ~ 0 까지 반복(3씩 감소)
    for(a in 10 downTo 0 step 3){
        print("$a ")
    }
}

출력 결과

위 코드를 하나씩 살펴보겠습니다.

for(a in 0..10){
    print("$a ")
}

먼저 보이는 a는 보이지는 않지만 val로 선언된 변수입니다. 그래서 for내부에서 a값을 변경할 수가 없습니다.

다음으로 in을 붙이고 반복할 값을 지정하면 됩니다.

0..10 은 0부터 시작해서 10까지 기본으로 1씩 증가시키게 됩니다.

 

for(a in 0..10 step 2){
    print("$a ")
}

이 코드에는 step 키워드가 추가되었는데요 이 키워드를 이용해서 증가값을 지정할 수 있습니다.

하지만 지정할 수 있는 값은 정수만 가능합니다. 만약 실수값으로 증가시켜야 한다면 while문을 이용하는 방법이 있습니다.

 

for(a in 10 downTo 0){
    print("$a ")
}

값을 감소시키기 위해서는 .. 대신 downTo키워드를 사용해야 합니다. 10.. 0 이런 식으로 작성하면 에러가 발생하게 됩니다.

 

for(a in 10 downTo 0 step 3){
    print("$a ")
}

이 코드는 10부터 시작해서 0까지 3씩 감소하는 코드입니다.

 

 

*추가 1

for문은 숫자뿐 아니하 배열이나 리스트 등 데이터를 순서대로 가져올 수도 있습니다.

fun main() {
    val a = listOf(0, 1, 2, 3, 4, 5)
    val b = setOf(3, 2, 5, 1, 2, 5, 1)
    val c = mapOf(0 to "num0", 1 to "num1", 2 to "num2")
    val d = arrayOf(5, 4, 3, 2, 1, 0)

    for (data in a){
        print("$data ")
    }

    println()//줄 바꿈

    for (data in b){
        print("$data ")
    }

    println()//줄 바꿈

    for (data in c){
        print("$data ")
    }

    println()//줄 바꿈

    for (data in d){
        print("$data ")
    }
}

 

이렇게 java에서 향상된 for문과 동일한 기능이라고 보시면 됩니다.

 

*추가 2

만약 리스트나 배열등의 값을 가져오면서 동시에 인덱스번호도 알아야 하는 경우가 있을 수 있습니다.

그런 경우에는

val a = arrayOf(3, 1, 4, 1, 5, 9, 2)

for (data in 1 .. a.size){
    println("인덱스 번호: ${data - 1} 데이터: ${a[data - 1]}")
}

이런 식으로 코드를 작성해도 되지만

*추가정보: "" 내부에서 $에 {}를 붙이면 내부에 수식, 조건문, 반복문 등 로직을 수행할 수 있습니다.

for ((indexNum, data) in a.withIndex()){
    println("인덱스 번호: $indexNum 데이터: $data")
}

 이렇게 변수 쪽에 괄호를 열고 (indexNum, data) 2개의 변수명을 작성한 뒤 배열이나 리스트 등의 데이터에 withIndex() 함수를 이용하면 인덱스 번호와 데이터를 동시에 가져올 수 있습니다.

 

2. while, do while

이 반복문은 java와 c에서 사용하는 방법이 완전히 동일하기 때문에 따로 예제코드는 작성하지 않겠습니다.

 

3. 연산자

코틀린에서 기본적인 연산자는 java와 동일하지만 언어 차원에서 변경된 부분이 일부 있습니다.

바로 비교 연산자인데요 일반적으로 ==를 사용하게 되는데요 이는 자바에서는 참조타입 변수는 참조를 비교하게 되며 원시타입 변수는 값을 비교하는 반면 코틀린에서는 ==는 값을 비교하는 연산자입니다.

즉 자바에서의 equals문과 동일한 역할을 하게 됩니다.

그리고 참조를 비교하는 연산자는 코틀린에서 === 를 사용하게 됩니다. 

정리하면

(참조타입을 비교할 경우)

== : 값을 비교 (자바에서 equals와 동일)

=== : 참조를 비교 (자바에서 == 와 동일)

 

(원시타입을 비교할 경우)

== ,=== 모두 값을 비교

 

이상으로 조건문, 반복문 (연산자)에 대한 설명을 마치겠습니다.

감사합니다

'kotlin(코틀린) 강좌' 카테고리의 다른 글

스코프, 접근제한자 + 프로젝트 구조  (0) 2024.10.04
class 사용  (4) 2024.09.16
함수  (0) 2024.08.30
List, Set, Map 컬렉션(Collection)  (0) 2024.08.29
배열 기본 사용법  (0) 2024.08.26