티스토리 뷰

본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!

1. 조건문

1. 1. if 표현식

  • 코틀린에서 일반적인 if 문과 비교해 차이점이 있는데 if 문이 표현식(expression)이라는 것이다.
표현식(expression) : 변수, 상수, 연산ㅅ자, 함수로 구성되어 무언가 값을 만드는 문장
구문(statement) : 특정 단어나 기호의 조합으로 무언가가 실행되도록 명령을 지시하는 문장

간단하게 말하자면 결괏값을 만드는지 아닌지의 차이로 인식하면 된다.
  • 다음과 같이 작성이 가능하다.
val result = if (isNight) "Good Bye" else "Good Morning"
  • if를 표현식으로 사용할 때는 반드시 else문을 꼭 작성해야 한다.
  • if 문에 중괄호 { }를 명시하여 여러 줄로 작성할 때 if 표현식으로 발생하는 데이터는 맨 마지막에 작성해야 한다.
val result2 = if (isNight) {
    print("Good Bye")
    "Good Bye" // { }의 마지막 줄인 이 부분이 result2의 값으로 할당된다.
} else {
    print("Good Morning")
    "Good Morning" // { }의 마지막 줄인 이 부분이 result2의 값으로 할당된다.
}

1. 2. when 표현식

  • 코틀린에서 제공하는 when은 C나 자바의 switch-case 구문과 비슷하지만, 기능이 더 많아서 다채롭게 이용할 수 있다.
  • switch 구문에서는 분기 조건을 정수로만 지정할 수 있지만, when에서는 정수 이외에도 다양한 타입의 데이터를 지정할 수 있으며, 아예 타입 자체를 지정할 수도 있다.
  • when의 분기 조건을 명시할 때 콤마(,)를 이용하여 여러 값을 한꺼번에 표현할 수 있으며, 분기 조건을 표현식으로 작성할 수 있다.
  • in이라는 예약어를 사용하여 데이터의 범위를 표현할 수도 있다.
  • 숫자 범위 뿐만 아니라 집합 데이터에도 사용한다.
when(data1){
    10, 20 -> println("data1 is 10 or 20")
    getSixty() -> println("data1 is 60")
    30 + 40 -> println("data1 is 70")
    in 11..20 -> println("data1 is 11 to 20")
    in list1 => println("data1 is in list1")
}
  • when에서 데이터 타입을 분기 조건으로 명시해야 할 때는 when에 지정하는 인수를 Any 타입으로 지정하면 된다.
fun testWhen(data: any){
    when(data){
        1 -> println("data value is 1")
        "hello" -> println("data value is hello")
        is Boolean -> println("data type is Boolean")
    }
}
  • 표현식으로 사용 가능하다. 표현식으로 사용할 때는 if문과 마찬가지로 else 부분을 생략할 수 없고 { }를 사용할 때는 마지막 줄에 데이터의 값이 결괏값이 되어야 한다.

2. 반복문

var sum: Int = 0
for (i in 1..10) {
    sum += 1
}
=====================
var sum: Int = 0
val list1 = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
for(num in list1){
    sum += 1
}
  • 자바의 반복문과 파이썬의 반복문 느낌이 섞인 느낌의 구문이다.
  • 인덱스가 필요할 때 indices 프로퍼티를 사용하면 된다.
  • 인덱스와 값이 모두 필요할 때는 withIndex() 함수를 이용한다.
// indices 활용 사례
for (idx in list1.indices) {
    sum += list1[idx]
}

// withIndex 활용 사례
for ((idx, value) in list1.withIndex()) {
    println("position is $idx")
    sum += value
}
  • until, step, downTo 등으로 반복문의 조건을 다양하게 활용 가능하다.
for (i in 1..10) { } -> 1 ~ 10 : 10까지 포함
for (i in 1 until 10) { } -> 1 ~ 9 : 10은 포함하지 않음
for (i in 2..10 step 2) { } -> 2, 4, 6, 8, 10 : 2씩 증가
for (i in 10 downTo 2) { } -> 10, 8, 6, 4, 2 : 2씩 감소

2. 2. while 반복문

  • 다른 언어에 비해 크게 다른 점은 없다.

2. 3. break와 continue문, 그리고 라벨

  • break와 continue문은 다른 언어에 비해 크게 다른 점은 없다.
  • 라벨은 특정 위치를 개발자 마음대로 이름을 정하고 continue나 break 문에서 이 이름으로 지정한 반복문을 벗어나게 할 수 있다.
here@ for (i in 1..3) {
    for (j in 1..3) {
        if (j > 1) break@here
        println("i : $i, j : $j")
    }
}

// 결과 : i : 1, j : 1

3. 연산자

다른 언어랑 겹치는게 많아서 새로웠던 것만 정리해봤다

  • 전개 연산자(*)는 배열 데이터를 단순 나열할 때
  • List 의 데이터를 전개 연산자로 바로 이용할 수는 없으며, toTypedArray() 등과 같은 함수를 활용하여 배열 데이터로 변경해서 이용해야 한다.
  • ==는 값에 대한 비교이고, ===는 객체에 대한 비교다.
    • 일반 객체를 비교할 때는 차이가 없지만 기초 타입의 데이터를 비교할 때는 차이가 있다.
    • Nullable(?) 사용 여부에 따라서도 차이가 생긴다.

JAVA랑 이런게 다르다

  • 코틀린에서는 비트 연산자가 없다.
    • 코틀린에서 기초 데이터 타입은 객체이므로 굳이 연산자로 제공하지 않고 객체의 함수로 비트 연산을 제공한다.
  • 자바의 삼항 연산자를 제공하지 않는다.
    • if문 자체가 표현식으로 사용될 수 있기 때문에 굳이 삼항 연산자를 제공할 필요가 없다.
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함