| 항목 |
Java |
Kotlin |
비고 |
| 클래스 정의 |
public class Person {} |
class Person |
접근제한자 기본값: Java=default, Kotlin=public |
| 변수 선언 |
int a = 10; |
val a = 10 (불변), var a = 10 (가변) |
|
| Null 안전성 |
String s = null; (가능) |
var s: String? = null |
? 붙여야 null 허용. 컴파일러가 NPE 방지 |
| 문자열 템플릿 |
"Hello " + name |
"Hello $name" 또는 "Hello ${user.name}" |
|
| 조건문 |
if(...) { ... } else { ... } |
동일, 하지만 표현식 가능: val max = if (a > b) a else b |
Kotlin은 값 반환 가능 |
| 삼항 연산자 |
int max = (a > b) ? a : b; |
없음 (if 자체가 표현식) |
삼항 대신 if 사용 |
| switch / when |
switch(x) { case 1: ... } |
when(x) { 1 -> ...; else -> ... } |
|
| 루프 |
for(int i=0;i<10;i++) |
for (i in 0..9) |
|
| foreach |
for(String s : list) |
for (s in list) |
문법 간결 |
| 함수 선언 |
int add(int a, int b) { return a+b; } |
fun add(a: Int, b: Int): Int = a + b |
단일 표현식 함수 가능 |
| static 함수/변수 |
static int x = 0; |
companion object { var x = 0 } |
|
| 람다식 |
list.stream().map(x -> x*2) |
list.map { it * 2 } |
it 키워드, 고차함수 풍부 |
| 타입 추론 |
없음 (명시 필요) |
대부분 추론 가능 |
val n = 10 → Int 추론 |
| 데이터 클래스 |
class User { String name; ... equals/hashCode/toString } 수동 구현 |
data class User(val name:String, val age:Int) |
equals/hashCode/toString 자동 생성 |
| 확장 함수 |
없음 |
fun String.lastChar() = this[this.length-1] |
기존 클래스에 기능 추가 가능 |
| 널 체크 |
if(s != null) { ... } |
s?.length (safe call), s!!.length (강제) |
Elvis 연산자 ?: 로 null일 경우 기본값 설정 가능 |
| 코루틴 |
없음 (Thread/Runnable) |
기본 제공 (suspend fun, launch) |
비동기/동시성 간결 |