# **코틀린 vs 자바: 기본 문법 비교** 코틀린은 자바 개발자가 배우기 쉬운 언어이지만, 몇 가지 중요한 문법적 차이가 있다. 이 글에서는 **변수 선언**, **null 안정성**, **타입 추론**을 중심으로 코틀린과 자바의 차이점을 비교해보겠다. ## **1. 변수 선언: `val`과 `var`** 자바에서 변수를 선언할 때는 반드시 데이터 타입을 명시해야 한다. ### **자바의 변수 선언** ```java int x = 10; // 변경 가능한 변수 final int y = 20; // 변경 불가능한 변수 (상수) ``` 코틀린에서는 `var`와 `val` 키워드를 사용하여 변수를 선언한다. - `var` → **변경 가능**(mutable) 변수 - `val` → **변경 불가능**(immutable) 변수 (자바의 `final`과 유사) ### **코틀린의 변수 선언** ```kotlin var x = 10 // 변경 가능 val y = 20 // 변경 불가능 (한 번만 할당 가능) ``` > **차이점 요약** > - 코틀린에서는 **데이터 타입을 생략**할 수 있다. (타입 추론 덕분) > - `val`은 `final`과 유사하지만, **런타임 상수는 아님**. (즉, `val` 변수는 런타임에서 초기화 가능) --- ## **2. 널 안정성 (Null Safety)** 자바에서는 `null` 값이 있을 경우 `NullPointerException(NPE)`이 발생할 수 있다. ### **자바의 null 처리** ```java String name = null; // 컴파일러가 오류를 발생시키지 않음 System.out.println(name.length()); // NullPointerException 발생 가능 ``` 코틀린에서는 **기본적으로 모든 변수는 null을 허용하지 않는다.** 만약 null을 허용하려면 `?`를 붙여야 한다. ### **코틀린의 null 처리** ```kotlin var name: String = "Kotlin" // null 허용 X // name = null // 컴파일 오류 발생 var nullableName: String? = "Kotlin" // null 허용 O nullableName = null // 가능 ``` #### **안전한 null 처리 방법** 1. **안전 호출 연산자 (`?.`)** ```kotlin println(nullableName?.length) // null이면 null 반환, 아니면 length 값 반환 ``` 2. **엘비스 연산자 (`?:`)** ```kotlin val length = nullableName?.length ?: 0 // null이면 기본값(0) 반환 ``` 3. **강제 호출 연산자 (`!!`)** ```kotlin println(nullableName!!.length) // null이면 강제 NPE 발생 ``` > **차이점 요약** > - 코틀린은 기본적으로 모든 변수에 대해 null을 허용하지 않음. > - `?`를 붙이면 null 허용 변수로 선언 가능. > - 안전한 호출 (`?.`), 기본값 제공 (`?:`), 강제 호출 (`!!`) 등의 문법을 제공. --- ## **3. 타입 추론 (Type Inference)** 자바에서는 변수 선언 시 반드시 타입을 명시해야 한다. ### **자바의 타입 선언** ```java String message = "Hello, Java!"; int number = 42; ``` 코틀린에서는 타입을 **컴파일러가 자동으로 추론**하므로, 명시적으로 쓸 필요가 없다. ### **코틀린의 타입 추론** ```kotlin val message = "Hello, Kotlin!" // String으로 추론 var number = 42 // Int로 추론 ``` 하지만 타입을 명확하게 하고 싶다면 명시적으로 적을 수도 있다. ```kotlin val message: String = "Hello, Kotlin!" var number: Int = 42 ``` > **차이점 요약** > - 코틀린은 **타입을 생략 가능**(컴파일러가 추론). > - 하지만 필요하면 타입을 명시할 수도 있음. --- ## **정리: 자바 vs 코틀린 비교** | 기능 | 자바 | 코틀린 | |------|------|--------| | **변수 선언** | `int x = 10;`
`final int y = 20;` | `var x = 10`
`val y = 20` | | **null 안정성** | `String name = null;` (가능하지만 NPE 위험) | `var name: String? = null` (null 허용 여부를 명확히 지정) | | **안전한 null 처리** | `if (name != null) { name.length(); }` | `name?.length ?: 0` | | **타입 추론** | `String message = "Hello";` | `val message = "Hello"` (타입 생략 가능) | --- 코틀린은 **더 간결하고 안전한 코드**를 작성할 수 있도록 설계된 언어다. 자바 개발자가 코틀린을 배우면 **불필요한 코드가 줄어들고**, **NPE 걱정 없이 더 안전한 프로그래밍**이 가능해진다. 다음에는 어떤 코틀린 개념을 비교해볼까?