IT/Kotlin

[Kotlin] 코틀린의 주요 문법 정리

까망수염 2025. 2. 6. 23:54
728x90
반응형

요즘 Kotlin을 배우고 사용하고 있다. Java 와 같으면서 차이가 느껴지는 언어다. Kotlin은 간결하고 직관적인 문법을 제공하는 JVM 기반 프로그래밍 언어로, Java보다 더 효율적인 코드 작성을 가능하게 하는 것이 특징이다. 이번 포스팅에서는 Kotlin의 주요 문법을 정리도록 하려고 한다.

변수와 데이터 타입

Kotlin에서는 val(불변)과 var(가변) 키워드를 사용하여 변수를 선언한다.

//val vs var
fun main() {
    val immutableValue: String = "변경 불가능"  // val: 불변 변수
    var mutableValue: Int = 10  // var: 가변 변수

    println(immutableValue)
    mutableValue += 5
    println(mutableValue)
}
  • val은 한 번 값을 할당하면 변경할 수 없지만, var는 변경이 가능하다
  • val을 선호하면 코드의 안전성과 유지보수성이 높아진다.
//타입 추론
fun main() {
    val name = "Kotlin"   // String 타입으로 자동 추론
    val age = 25          // Int 타입으로 자동 추론
    val isKotlinFun = true // Boolean 타입으로 자동 추론

    println("$name 은 재미있다: $isKotlinFun")
}
  • Kotlin은 타입 추론(Type Inference)을 지원하여 변수 선언 시 타입을 생략할 수 있다.

함수 선언과 호출

Kotlin에서는 fun 키워드를 사용하여 함수를 선언할 수 있다.

// 기본함수 선언
fun add(a: Int, b: Int): Int {
    return a + b
}

fun main() {
    println(add(5, 3)) // 출력: 8
}

//한 줄 함수(Expression Body)
fun multiply(a: Int, b: Int) = a * b

fun main() {
    println(multiply(4, 2)) // 출력: 8
}
  • = 기호를 사용하여 함수 본문을 한 줄로 작성할 수도 있다.
  • 반환 타입이 명확한 경우 return 키워드를 생략할 수 있다.

조건문 (if, when)

kotlin의 if는 표현식으로 사용될 수 있으며, Java의 switch문을 대신하여 when을 사용할 수 있다.

//if-else
fun max(a: Int, b: Int): Int {
    return if (a > b) a else b
}

fun main() {
    println(max(10, 20)) // 출력: 20
}

//when
fun getGrade(score: Int): String {
    return when (score) {
        in 90..100 -> "A"
        in 80..89 -> "B"
        in 70..79 -> "C"
        else -> "F"
    }
}

fun main() {
    println(getGrade(85)) // 출력: B
}
  • when 문은 값 비교뿐만 아니라 범위(in 90..100)를 활용할 수도 있다.

반복문 (for, while, do-while)

//반복문
fun main() {
    for (i in 1..5) {
        println(i)  // 출력: 1 2 3 4 5
    }

    for (i in 1 until 5) { // 5는 포함되지 않음
        println(i)  // 출력: 1 2 3 4
    }

    for (i in 5 downTo 1) {
        println(i)  // 출력: 5 4 3 2 1
    }

    for (i in 1..10 step 2) {
        println(i)  // 출력: 1 3 5 7 9
    }
}
  • until을 사용하면 끝값이 포함되지 않다.
  • step을 사용하면 특정 간격으로 증가할 수 있다.

클래스와 객체 (Object-Oriented Programming)

Kotlin은 객체지향 프로그래밍을 지원하며, class 키워드를 사용하여 클래스를 정의한다.

//기본 클래스와 생성자
class Person(val name: String, var age: Int) {
    fun introduce() {
        println("안녕하세요, 저는 $name 이고, $age 살입니다.")
    }
}

fun main() {
    val person = Person("홍길동", 30)
    person.introduce()
}
  • 기본 생성자에서 val과 var을 사용하여 프로퍼티를 선언할 수 있다.
  • 클래스 내부에서 함수를 정의할 수 있다.

Null 안전성 (Null Safety)

Kotlin은 null 값을 허용하지 않는 타입 시스템을 기본으로 제공하며, ?를 사용하여 null을 허용할 수 있다.

//Nullable 타입 선언 및 처리
fun main() {
    var name: String? = "Kotlin"  // null 가능 변수 선언
    name = null  // 가능

    println(name?.length)  // 안전 호출 (null이면 실행되지 않음)
    
    println(name!!.length)  // '!!'를 사용하면 null일 경우 오류 발생
}
  • ?를 붙이면 해당 변수는 null을 가질 수 있습니다.
  • ?.(안전 호출 연산자)를 사용하면 null 값일 때 오류 없이 실행됩니다.
//Non-null 단언 연산자 (!!) 사용
fun main() {
    var name: String? = "Kotlin"  // null 가능 변수 선언
    name = null  // 가능
    
    println(name!!.length)  // '!!'를 사용하면 null일 경우 오류 발생
}
  • !!(Non-null 단언 연산자)를 사용하면 개발자가 null이 아님을 보장하지만, null일 경우 NullPointerException이 발생한다.

코틑린의 확장 함수 (Extension Function)

Kotlin은 기존 클래스에 새로운 함수를 추가할 수 있는 확장 함수(Extension Function) 기능을 제공한다.

//String 클래스 확장 함수
fun String.addHello(): String {
    return "Hello, $this!"
}

fun main() {
    val name = "Kotlin"
    println(name.addHello()) // 출력: Hello, Kotlin!
}
  • 기존 클래스(String)에 새로운 함수(addHello())를 추가할 수 있다.
  • 원본 클래스의 소스를 변경하지 않아도 기능을 확장할 수 있다.

마무리

이번에는 Kotlin의 주요 문법을 정리해 보았다.
Java로 다시 코딩을 하기는 어려울 것 같다.

 

728x90
반응형