Kotlin 기초 문법 정리

fun main() {
    println("Hello, World!")
}

변수와 타입 선언

코틀린에서는 val로 불변 값을, var로 가변 변수를 선언한다. 함수 정의에는 fun 키워드를 사용한다. 타입은 콜론 뒤에 위치하며, 초기값이 명확하면 컴파일러가 자동으로 추론한다.

구분 코틀린 스위프트
상수 val count = 10 또는 val count: Int = 10 let count = 10 또는 let count: Int = 10
변수 var total = 10 또는 var total: Int = 10 var total = 10 또는 var total: Int = 10
반환값 있는 함수 fun increment(n: Int): Int { return n + 1 }
fun increment(n: Int): Int = n + 1
fun increment(n: Int) = n + 1
func increment(n: Int) -> Int { return n + 1 }
반환값 없는 함수 fun display(n: Int): Unit { println(n) }
fun display(n: Int) { println(n) }
fun display(n: Int): Unit = println(n)
fun display(n: Int) = println(n)
func display(n: Int) -> () { print(n) }
func display(n: Int) -> Void { print(n) }
func display(n: Int) { print(n) }

함수 본문이 블록 형태면 반환 타입 생략이 불가능하고, 식 형태면 항상 생략 가능하다.

문자열 처리

문자열 템플릿은 $변수명 또는 ${계산식} 형태로 사용한다. 달러 기호 자체를 표현하려면 ${'$'}를 사용한다. 여러 줄 문자열은 삼중 따옴표로 감싼다.

기능 코틀린 스위프트 C# 결과
문자열 템플릿 val a = 5; val b = 8
val msg = "a=$a, b=${b * 2}"
let a = 5, b = 8
let msg = "a=\(a), b=\(b * 2)"
int a = 5, b = 8;
var msg = $"a={a}, b={b * 2}";
a=5, b=16
여러 줄 문자열 val cost = """
${'$'}15.99
"""
var cost = """
$15.99
"""
var cost = @"
$15.99
";
빈 줄
$15.99
빈 줄

범위와 순회

동작 코틀린 스위프트 출력
오름차순 범위 for (n in 2..5) print(n) for n in 2...5 { print(n, terminator: "") } 2345
내림차순 (역순) for (n in (2..5).reversed()) print(n) for n in (2...5).reversed() { print(n, terminator: "") } 5432
내림차순 (downTo) for (n in 5 downTo 2) print(n) for n in stride(from: 5, through: 2, by: -1) { print(n, terminator: "") } 5432
건너뛰기 (step) for (n in 2..8 step 2) print(n) for n in stride(from: 2, through: 8, by: 2) { print(n, terminator: "") } 2468
반개방 범위 for (n in 2 until 6) print(n) for n in 2..<6 { print(n, terminator: "") } 2345
위 포함 검사 val v = 4
if (v in 1..10) println(v)
let v = 4
if (1...10).contains(v) { print(v) }
4

동등성 비교

언어 값 동등성 참조 동등성
코틀린 p == q, p != q p === q, p !== q
스위프트 p == q, p != q p === q, p !== q

제어 흐름

if-else 식

val x = 7; val y = 12
val smaller: Int
if (x < y) smaller = x else smaller = y

val min = if (x < y) x else y

val result = if (x < y) {
    println("x가 더 작음")
    x
} else {
    println("y가 더 작거나 같음")
    y
}

인자 없는 when

fun Int.isPrime() = this > 1 && (2 until this).none { this % it == 0 }
fun Int.isComposite() = this > 1 && !isPrime()

val num = 9
when {
    num.isPrime() -> println("소수")
    num.isComposite() -> println("합성수")
    else -> println("둘 다 아님")
}

인자 있는 when

fun categorize(item: Any): String =
    when (item) {
        0 -> "영"
        1, 2 -> "일 또는 이"
        in 3..5 -> "삼에서 오"
        "Kotlin" -> "프로그래밍 언어"
        is Double -> "실수"
        !is String -> "문자열 아님"
        else -> "기타"
    }

println(categorize(0))      // 영
println(categorize(2))      // 일 또는 이
println(categorize(4))      // 삼에서 오
println(categorize(3.14))   // 실수
println(categorize("Hi"))   // 기타

함수 정의와 활용

지역 함수와 변수 캡처

fun outerOperation() {
    var counter = 0
    fun innerIncrement() {
        counter++
    }
    innerIncrement()
    innerIncrement()
    println(counter)  // 2
}

기본 인자값과 명명 인자

fun multiply(factor: Int = 2, value: Int = 3) = factor * value

println(multiply())           // 6
println(multiply(4))          // 12 (factor=4, value=3)
println(multiply(value = 5))  // 10 (factor=2, value=5)

가변 인자

언어 선언 방식
코틀린 fun sum(vararg values: Int): Int
스위프트 func sum(values: Int...) -> Int
C# int Sum(params int[] values)
자바 int sum(int... values)

함수 타입

언어 반환 있는 함수 타입 반환 없는 함수 타입
코틀린 (Int, Int) -> Boolean (Int, Int) -> Unit
스위프트 (Int, Int) -> Bool (Int, Int) -> Void
C# Func<int, int, bool> Action<int, int>

코틀린에서 함수는 일급 객체로, 매개변수나 반환값이 될 수 있다. 클래스의 함수는 멤버 함수, 기존 클래스에 추가하는 함수는 확장 함수라 부른다. 단일 인자를 받는 멤버 함수나 확장 함수는 infix로 중위 표기법 호출이 가능하다.

태그: Kotlin 변수선언 함수타입 문자열템플릿 범위연산

5월 31일 12:08에 게시됨