💻 [Kotlin] 기본 문법 훑기 (Java 개발자 입장에서 느낀 차이)
2025. 11. 10. 10:55

개요

코틀린을 처음 만지면 “문법이 깔끔하다”는 느낌보다, “이거 왜 이렇게 선언하지?”가 먼저 옵니다.
이번 글은 변수, 타입, 함수 선언, if/when, for/while, nullable 같은 기본 문법을 실무 감각으로 정리하면서
“자바에서 익숙한 감각과 뭐가 다르고, 어떻게 쓰면 좋은지”를 중심으로 다뤄봤습니다.


주요 포인트 요약

  • var vs val: 진짜로 불변성 개념을 체감함
  • 타입 추론은 편하지만, 타입 명시가 더 명확할 때도 많음
  • if가 ‘식(expression)’이라 return 문이 필요 없음
  • when은 단순 switch가 아니라 “조건 분기 DSL”처럼 쓸 수 있음
  • 널 처리(?, ?:, !!)는 문법이 아니라 사고방식의 차이

변수 선언과 타입 추론

val name = "Mingu" // 불변
var age = 28        // 변경 가능
 
자바라면:

 

final String name = "Tester";
int age = 28;
처음엔 var로 다 쓰게 되지만, 코틀린은 의도적으로 val을 기본값으로 쓰게 설계되어 있음.
실무 코드에서는 대부분 “상태를 가지지 않는 구조”로 짜는 게 유리함.
 

함수 선언 방식

 
fun greet(name: String): String {
    return "Hello, $name"
}

 

혹은 짧게:

fun greet(name: String) = "Hello, $name"
코틀린의 함수는 표현식이라 return 생략이 가능.
익숙해지면 단순 반환 함수엔 중괄호보다 =를 더 자주 쓰게 됨.

조건문과 when 문

val score = 87
val grade = when {
    score >= 90 -> "A"
    score >= 80 -> "B"
    score >= 70 -> "C"
    else -> "F"
}
when은 switch의 업그레이드판이다.
단순 분기뿐 아니라 “조건 평가 결과를 변수로 바로 반환”할 수 있어서 실무 로직이 깔끔해진다.
특히 Enum 타입이나 sealed class와 궁합이 좋음

Null-Safety 핵심 정리

  • ✅ ?. : 안전 호출
  • ✅ ?: : 엘비스 연산자 (null일 때 기본값 대입)
  • ✅ !! : 강제 non-null (실무에서는 거의 안 씀)
직접 써보면서 느낀 점은 “null 가능성을 타입 수준에서 설계 단계에 반영한다”는 게 가장 큰 차이였음.
자바에서는 그냥 런타임까지 가봐야 알던 걸, 컴파일러가 미리 잡아줌.

for / while 문 느낌

Java

public String findUserStatus(int age) {
    if (age >= 20) {
        return "ADULT";
    } else {
        return "MINOR";
    }
}

 

Kotlin

fun findUserStatus(age: Int) = if (age >= 20) "ADULT" else "MINOR"

학습 중 깨달음

  • 문법은 금방 익히지만, 불변성(val)nullable 설계는 단순 문법 문제가 아님.
  • Kotlin은 “코드를 줄이는 언어”가 아니라 “실수를 줄이는 언어”에 가깝다.
  • 익숙해질수록 “이건 변수로 두면 안 되겠다” 같은 설계 감각이 생김.

회고

솔직히 처음엔 val이 답답했는데,
서비스 코드 리팩토링하면서 “이 값이 진짜 변경돼야 하나?”를 다시 생각하게 되더군요.
결과적으로 불변 중심 설계의 장점을 체감했습니다.