저는 Java를 주로 사용합니다. 그런데 취미로 Flutter를 이용해서 앱을 만들어보려고 하던 중 Java와 완전호환성을 가지고 있고 새로운 언어인 Kotlin에 관심이 가더라구요. 하지만 Java보다 어떤것이 더 나은지 아니면 차이점은 무엇인지 정도는 알고 써야 제가 익숙한 Java를 사용하지 않는 이점이 있을 것 같아서 찾아보고 정리하게 되었습니다.
kotlin이란
Java Platform을 대상으로 하는 새로운 프로그래밍 언어로서 즉, JVM에서 돌아가는 언어이다. Jetbrains에서 만들었다.
Kotiln의 철학
- 실용성
- Kotlin은 다른 프로그래밍 언어가 채택한 검증된 해법과 기능을 사용하여 복잡도를 줄인 실용적인 언어를 지향하고 있습니다.
- 간결성
- 코드를 더 간단하고 간결하게 만들어 내용을 쉽게 파악할 수 있게 했다. Kotlin에서는 구조를 만족시키기 위해 반복적이고 부수적인 코드를 줄이기 위한 기능을 제공한다.
- 안전성
- 타입 추론을 제공하여 타입 안정성을 보장하고 컴파일 시점에 오류를 더 많이 방지해준다.
- 상호운용성
- Java 라이브러리들을 Kotlin에서도 그대로 사용할 수 있다.
Java의 특징
우선은 Java의 특징부터 알아야지 비교가 가능할 것 같습니다. 간단하게만 나열하자면 아래와 같습니다.
- 플랫폼에 구애를 받지 않는다
- JVM(Java Virtual Machine)만 있다면 어느 플랫폼에서든지 자바 어플리케이션을 작동시킬 수 있다.
- 포인터 개념 대신 자동으로 메모리 관리
- JVM에서 지원하는 기능으로 Garbage Collection을 이용하여 자원을 자동으로 관리해줍니다.
- OOP(Object Oriented Programming)
- 객체라는 단위를 메인으로 객체간의 상호작용을 통해 프로그래밍을 하게됩니다.
- 동적 로딩
- 필요한 시점에 클래스 정보를 메모리에 로드할 수 있습니다.
Kotlin의 특징
- 플랫폼에 구애를 받지 않는다
- Java와 동일하게 JVM만 있다면 플랫폼에 구애받지 않고 동작할 수 있다.
- 정적 타입 지원
- Java와 동일하게 정적 언어의 특징을 가지고 있다. 그래서 컴파일시에 자료형이 결정된다.
- 함수형 프로그래밍 지원
- 무료 오픈소스
- Java는 점점 유료화가 진행되고 있는 반면에 Java와 호환되지만 무료 오픈소스이다.
Kotlin과 Java의 사용법에서의 차이
Java와 사용할 때 차이가 발생하는 부분에 대해서 살펴보겠습니다.
변수/상수
//Java
String a = "";
final String b = "";
//Kotlin
var a = ""
val b = ""
Optional
//Java
String nullStr = Optional.ofNullable(null).toString();
String nonNullableStr = Optional.of("").toString();
//Kotlin
var nullStr? = null
var nonNullStr = ""
Kotlin에서는 Optional(?)을 통해서 간결하게 nullable한 변수와 nonNullable한 변수를 나눠서 표시할 수 있습니다.
Data Class
//Kotlin
data class KotlinData(var param: String?, var index: Int)
Kotlin에서는 DTO를 생성할 때 간결하게 만들 수 있도록 data class를 제공합니다. Java에서는 생성자, getter, setter를 만들어야 하는 부분을 생략할 수 있게 해주는 역할입니다.
정리
Kotlin의 가장 큰 특징은 아무래도 Java와 완벽한 호환이 된다는 점입니다. 이러한 바탕을 두고 간결성과 실용성이 조금 더 추가된 언어라고 할 수 있습니다.
하지만 'Java를 버리고 Kotlin만 선택할 수 있는가' 라는 질문에 대해서는 개인적으로는 그럴 수도 있지만 권장하지 않는다라고 할 수 있겠습니다. 물론 Kotlin 코드로 모든 Java 코드를 대신할 수 있습니다. 하지만 다른 코드를 이해하고 사용하는 것에는 Java를 잘 아는 것이 필요합니다.
예를 들어 현 시점에서 라이브러리 같은 코드는 Java로 이루어진 것들이 월등히 많습니다. 이를 Kotlin으로 완전히 변경 후 사용한다는 것은 시간이 걸릴 것 같습니다. 그러므로 지금 바로 사용할 때는 Java 코드를 이해하고 적용해야 할 필요가 있을 것 같습니다.