ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java to Kotlin] 코틀린과 자바의 기본 문법 차이
    JAVA 2025. 1. 17. 10:31

     

    1. 변수 선언 (var vs val)

    코틀린에서는 변수를 선언할 때 var과 val을 사용해서 변수의 변경 가능성을 명확히 구분한다.

     

    var (가변 변수)

    • var 키워드로 선언된 변수는 값을 변경할 수 있다.
    • var 키워드로 선언된 변수를 사용할 때는 불필요한 변경을 피해야 한다.
    var name = "홍길동"
    println(name)

     

    val (불변 변수)

    • val 키워드로 선언된 변수는 한 번만 할당할 수 있으며, 값을 변경할 수 없다.
    • 자바의 final 키워드와 비슷하다.
    val age = 25
    println(age)
    
    //age = 30 -> 오류 발생
    • val은 참조 자체를 변경할 수 없지만, 객체 내부의 속성은 변경이 가능하다.
    data class Person(var name: String, var age: Int)
    
    val person = Person("홍길동", 25)
    println(person.name)
    
    person.name = "박문식"
    println(person.name)

     

    💡 객체 자체를 변경할 필요가 없다면 val을 사용하여 코드 안정성을 높이는 것이 좋다.

     

     

     

    2. 변수 선언 (lateinit / const)

    lateinit (지연 초기화)

    • lateinit 키워드를 사용하면 나중에 초기화 할 변수를 선언할 수 있다. 단 var만 가능하다.
    • 주로 클래스 내에서 의존성 주입 또는 나중에 초기화가 필요한 경우에 사용한다.
    • lateinit을 사용하기 전에 초기화하지 않으면 UninitializedPropertyAccessException이 발생한다.
    Class User {
    	lateinit var name: String
        
        fun initialize() {
            name = "홍길동"
        }
        
        fun printName() {
            println(name)
        }
    }
    
    val user = User()
    user.initialize()
    user.printName()

     

    const (컴파일 타임 상수)

    • const val은 기존의 val 보다 더 강력한 불변성을 가진다.
    • const val을 사용하면 컴파일 타임 상수를 정의할 수 있다.
    • 객체 내부가 아닌 최상위 수준 또는 object 내부에서만 사용이 가능하다.
    const val PI = 3.1415
    
    fun main() {
    	println(PI)
    }

     

     

     


     

     

    3. 널 안정성 (Null Safety)

    자바에서는 null 값이 있는 객체를 잘못 다루면 NullPoinerException이 발생할 수 있는데, 코틀린에서는 이를 방지하기 위해 널 안정성이라는 개념을 도입했다.

     

     

    기본적으로는 null 불가

    var name: String = "홍길동"
    name = null // -> 오류 발생

     

    null을 사용하려면 ? 기호 사용

    var nullableName: String? = "Bob"
    nullableName = null //가능

     

    Safe Call (?.)

    • ?. 연산자를 사용하면 null 체크 없이 안전하게 접근이 가능하다
    val length: Int? = nullableName?.length
    println(length) //nullableName이 null이면 null 반환

     

    Elvis 연산자 (?:)

    • null일 경우 기본값을 지정할 수 있다.
    val length: Int = nullableName?.length ?: 0
    println(length) // nullableName이 null이면 0 반환

     

    !! 연산자 (명시적 Null 강제 해제)

    • !! 연산자는 null이 아님을 확신할 때 사용한다.
    • 만약 null이라면 NullPointerException이 발생하게 된다.
    val length: Int = nullableName!!.length

    💡 !! 연산자 보다는 ?. 나 ?: 연산자를 사용하는 것이 좋다.

     

    let 함수와 ?. 활용

    • let 함수는 null이 아닐 때 실행하는 블록을 지정할 수 있다.
    • ?.let을 사용하면 null 체크 후 안전하게 실행할 수 있다.
    nullableNmae?.let {
    	println("이름의 길이: ${it.length}")
    }

     

     

     

     


     

     

     

    4. 문자열 템플릿

    코틀린에서는 문자열을 다룰 때 + 연산자 대신 문자열 템플릿을 지원한다.

     

     

    기본적인 문자열 템플릿

    val name = "홍길동"
    val greeting = "Hello, $name!"
    println(greeting) // Hello, 홍길동!

     

    중괄호 사용

    val age = 25
    println("${age}살 입니다.")

     

    여러 줄 문자열 (""")

    val text = """
        코틀린에서
        자바로 마이그레이션
    """.trimIndent()
    
    println(text)

    💡 .trimIndent()를 사용하면 자동으로 들여쓰기 제거가 가능하다.

     

     

    자바에서의 문자열 템플릿과 비교

    // Java 방식
    String name = "홍길동";
    System.out.println(String.format("Hello, %s!", name));
    // Kotlin 방식
    val name = "홍길동"
    println("Hello, $name!")

     

     

Designed by Tistory.