기타

Kotlin의 기초 문법 알아보기

citron031 2023. 9. 9. 11:16

Kotlin은 Java를 대체하기 위한 언어로 등장하여 점점 저변을 확대해나가고 있다.

Android에서는 Jetpack Compose가 코틀린으로 작성되고, 스프링도 요즘엔 코틀린으로 작성되는 경우가 점점 늘어나고 있다고 한다.

 

코틀린을 배우면서 생소했던 기초 문법들에 대해서 정리하고자 이번 글을 작성하게 되었다.

 

예제 코드들은 코틀린 플레이그라운드에서 확인할 수 있다.

https://play.kotlinlang.org/

 

Kotlin Playground: Edit, Run, Share Kotlin Code Online

 

play.kotlinlang.org

 

코틀린의 실행 진입점은 main function이다.

print와 println으로 콘솔을 출력할 수 있는데, 차이점은 ln이 붙은쪽이 엔터가 끝에 들어간다는 점이다.

자바스크립트처럼 끝에 세미콜론 ;을 붙일 수도 붙이지 않을 수도 있는데, 붙이지 않는 쪽이 표준이다.

Unit은 void와 같이 return이 없음을 의미한다.

 

Var, Val 변수 선언

fun main() {
    var str = "수정 가능"
    val finalStr = "수정 불가능"
    
    str = "바뀜..."
    
    print(str)
    println(finalStr)
}

var는 자바스크립트로 보면 let과 같이 수정될 수 있는 변수이다.

val은 자바스크립트의 const나 자바의 final과 같이 상수로써 수정될 수 없는 변수를 의미한다.

 

null 허용하기

fun main() {
    var z: Double? = 10.123

    z?.let {
        println(z)
    }

    z = null
}

변수 이름 뒤에 ?를 붙여 null을 허용할 수 있다.

만약 null이 허용되었을 때, null이 아닐때만 실행하고 싶은 로직이 있다면, .let으로 처리할 수 있다.

when

🙏 when은 java의 switch문을 대체하는 문법같다.

fun main() {
    val counter = 100
	when {
        counter < 100 -> {
            println("OVER")
        }
        else -> {
            println("UNDER 🙀")
        }
    }
}

when은 if문처럼 사용될 수 있다.

 

fun main() {
    val counter = 100
	when {
        counter < 100 -> {
            println("OVER")
        }
        else -> {
            println("UNDER 🙀")
        }
    }
}​

값을 return하는 형태로도 when문이 사용될 수 있다.

val result = when {
    counter < 100 -> {
        "OVER"
    }
    else -> {
        "UNDER 🙀"
    }
}
println("result $result")

🎉 if문도 when처럼 값을 변수에 리턴할 수 있다.

listOf 와 mutableListOf

fun main() {
    var numbers: List<Int> = listOf(-1, 0, 1)
    numbers.forEach{el -> println(el)}
    
    println("======")
    
    var mutableNumbers: MutableList<Int> = mutableListOf(-1, 0, 1)
    mutableNumbers.add(100)
    mutableNumbers.remove(0)
    
    mutableNumbers.forEach{el -> println(el)}
}

listOf로 수정할 수 없는 list를 생성할 수 있고, mutableListOf로 수정할 수 있는 list를 생성할 수 있다.

list는 forEach를 통해서 순회할 수 있다.

 

try catch를 통한 에러 처리

fun main() {
    var numbers: List<Int> = listOf(-1, 0, 1)
    try {
        val target = numbers[-1]
    } catch (e: Exception) {
        print(e)
    }
}

코틀린은 음수 인덱스로 배열에 접근할 수 없다.

try catch를 통해서 이때 발생하는 에러를 찾아 처리할 수 있다.

 

setOf, mutableSetOf

val numbers = setOf(1, 2, 3, 4)
println(numbers)
    
val mutableNumbers = mutableSetOf(1, 2, 3, 4)
mutableNumbers.add(1)
mutableNumbers.add(100)
println(mutableNumbers)

set은 중복이 없는 요소들의 집합이다.

setOf와 mutableSetOf로 사용할 수 있는데, 전자는 수정이 불가능하고 후자는 수정이 불가능한 집합이다.

 

mapOf, mutableMapOf

val numbers = mapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
println(numbers["one"])

val mutableNumbers = mutableMapOf("one" to 1, "two" to 2, "three" to 3, "four" to 4)
mutableNumbers.put("one", -1)
mutableNumbers.put("king", 100)
println(mutableNumbers)

key, value의 형태로 데이터를 사용하기 위해서 mapOf, mutableMapOf를 사용할 수 있다.

전자는 수정 불가능, 후자는 수정이 가능한 형태의 자료구조이다.

 

for i 

fun main() {
    var numbers: List<Int> = listOf(-1, 0, 1)
    for (index in numbers.indices) {
        println(numbers[index])
    }
}

for i 문법을 통해서 list를 순회할 수 있다.

.indices로 index 번호를 순회할 수 있다.

 

숫자 Ranges

for (num in 1..10 step 2) {
    print(num)
}

숫자의 범위를 표현하기 위해서 ..키워드를 사용할 수 있다.

for문에서 해당 범위를 순회할 수 있고, for문의 기본값으로 1씩 증가하는 속성은 step 키워드를 통해 수정할 수 있다.

 

class

fun main() {
    abstract class Person {
        open fun hi() {
            println("hello!")
        }
    }
    class John: Person() {
        override fun hi() {
            println("Hiiiiiii !")
        }
    }
    val man = John()
    man.hi()
}

class에서의 상속은 : 를 통해서 이루어진다.

 

class Tea<T>(val option: T)

변수 선언을 클래스 내부가 아니라 () 내부에서 할 수도 있다.

변수 선언 이외에 별다른 기능이 없다면, {}도 생략이 가능하다.

 

data class Zombie(val type: String) {
    init {
        println("ZOMBIE !!!!!!!!!!!!!!")
    }
}

fun main() {
    val zom1 = Zombie("man")
    val zom2 = Zombie("man")
    println(zom1 == zom2)

}

data 클래스는 기존의 class와는 다르게 같은 인자를 가지면 같은 인스턴스로 인식한다.

init은 인스턴스가 생성되었을 때 실행되는 클래스 내부의 인자이다.

 

callback

fun testCallback(num: Int, callBack: () -> Unit) {
    callBack()
}

코틀린도 자바스크립트처럼 함수의 인자로 콜백 함수를 건네줄 수 있다.

 

 

 

‼️ 공식 문서

https://kotlinlang.org/docs/basic-syntax.html

 

Basic syntax | Kotlin

 

kotlinlang.org