-
[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!")'JAVA' 카테고리의 다른 글
[Java to Kotlin] 코틀린 : 클래스와 객체 (1) 2025.01.17 [Java to Kotlin] 코틀린 : 조건문 / 반복문 / 리스트 & 맵 (0) 2025.01.17 [Java] 빌드 관리 도구 - Maven, Gradle, Gradle 설정 예제 (1) 2024.11.07 Java - Lambda (0) 2024.11.05 Java - 공유자원과 동기화 메서드 (1) 2024.11.01