☕️ Java to Kotlin, 느낀점
Java로 개발해온 시간이 길수록 Kotlin은 낯설게 느껴진다.
하지만 막상 써보면 “이래서 사람들이 Kotlin을 쓰는구나” 싶을 만큼 편해진다.
최근 프로젝트를 Kotlin으로 전환하며 체감한 변화들을 정리했다.
Null-safe, 더 이상 NullPointerException 걱정이 없다
Java에서는 아래처럼 null 체크를 매번 해줘야 했다.
if (user != null && user.getName() != null) {
System.out.println(user.getName());
}Kotlin에서는 이렇게 쓴다.
println(user?.name ?: "이름 없음")?. 와 ?: 만으로 조건문이 사라진다.
Null-safe 문법이 처음엔 어색했지만 금방 손에 익는다.
이제는 오히려 Java의 if (x != null) 구문이 너무 장황하게 느껴진다.
간결해진 DTO
Java
public class UserDto {
private String name;
private String email;
// getters, setters, toString, equals, hashCode ...
}Kotlin
data class UserDto(val name: String, val email: String)이 한 줄로 getter, setter, equals(), hashCode(), toString()이 자동 생성된다.
Spring에서 DTO를 여러 개 만들다 보면 이 차이가 진짜 크다.
코드량이 줄면서 테스트 작성 속도도 훨씬 빨라진다.
간결한 Controller
Java
@GetMapping("/hello")
public String hello(@RequestParam String name) {
return "Hello " + name;
}Kotlin
@GetMapping("/hello")
fun hello(@RequestParam name: String) = "Hello $name"함수 본문이 한 줄이면 중괄호 대신 = 로 표현할 수 있다.
작은 API를 만들 때 이런 표현식 함수 문법 덕분에 코드가 훨씬 깔끔하다.
확장 함수(Extension Function) — 기존 클래스에 기능 추가
예를 들어 문자열이 이메일 형식인지 검사하는 확장 함수를 만든다고 하면:
fun String.isEmail(): Boolean =
this.contains("@") && this.contains(".")사용할 때는 이렇게 쓴다.
val email = "prao@gmail.com"
if (email.isEmail()) println("유효한 이메일입니다.")별도 유틸 클래스를 만들 필요도 없고,
마치 String 클래스에 원래 있었던 함수처럼 쓸 수 있다.
이게 Kotlin의 가장 큰 매력 중 하나였다.
불변(Immutable)이 기본 — val vs var
Kotlin에서는 변수 선언 시 기본이 불변(val)이다.
val name = "Prao" // 변경 불가
var age = 29 // 변경 가능val로 선언하면 IDE가 실수로 값을 바꾸는 걸 막아준다.
프로젝트가 커질수록 사이드 이펙트를 줄여주는 안전장치가 된다.
실제로 써보면 코드가 ‘절반 이하’로 줄어든다
Spring Boot 프로젝트 일부를 Kotlin으로 바꿔보니
Controller와 DTO는 거의 절반 이하로 줄었다.
Java에서는 Optional, Stream을 써야 했던 부분도
Kotlin의 map, filter, let, apply 로 훨씬 직관적으로 바뀐다.
비즈니스 로직이 한눈에 들어오고,
“어떤 역할을 하는 코드인지” 설명 없이도 읽히는 게 가장 큰 장점이었다.
회고
2022년, 처음 개발을 시작했을 때 나는 내가 상상한 것을 코드로 구현할 수 있다는 사실에 큰 즐거움을 느꼈다.
작년엔 싸피에서 친구들과 함께 팀을 꾸려 기획부터 배포까지 직접 참여했다. 밤을 새워가며 개발했고, 마침내 경진대회에서 우리가 개발한 서비스를 발표하고 시연했을 때의 그 설렘은 지금도 잊기 어렵다.
하지만 어느새 나는 그때의 마음을 잃고 있었다.
오랜만에 새로운 언어를 공부하면서, 내가 왜 개발자가 되고 싶었는지를 다시 떠올리게 되었다.
처음의 목표는 단순했다.
‘항상 고민하는 개발자’가 되는 것.
그런데 시간이 흐르며 자격증을 따고, 승진 요건을 채우고, 점수를 얻는 일에 집중하게 되었다.
이번 계기를 통해 내년의 목표를 새로 세우려 한다.
Kotlin을 본격적으로 공부하고, 취준생 시절 써보고 싶었지만 미처 손대지 못했던 기술들을 프로젝트에 직접 적용해볼 생각이다.
다시, 내가 좋아하는 방식으로 개발해보려 한다.
💡 참고 문헌
'Kotlin' 카테고리의 다른 글
| Kotlin vs Java 알고리즘 풀이 비교 (0) | 2025.11.16 |
|---|---|
| Kotlin + Spring Boot ORM/DSL 선택 (1) | 2025.11.15 |
| Spring Boot에서의 Kotlin 그리고 Java (1) | 2025.11.14 |
