코틀린의 문법을 익히기에 앞서 자바를 사용해 왔다면,
자바와 코틀린의 차이점에 대해 어느정도 파악해 두고 시작하면 좋을 것이다
1. 자바에는 있지만 코틀린에는 없는 것
- Checked Exception
이전 포스팅에서 Java와 관련하여 다루었던 주제인 예외의 종류(https://kadun.tistory.com/entry/Java-%EC%98%88%EC%99%B8%EC%9D%98-%EC%A2%85%EB%A5%98Checked-UnChecked-Error) 에서 Checked Exception이 코틀린에는 존재하지 않는다.
자바의 경우에는 해당 예외를 반드시 처리해주어야 하기 때문에, try - catch 로 감싸거나, throws로 예외를 전파해주어야 하지만, 코틀린에서는 해당 예외에 대한 try - catch 처리를 강제하지 않는다. - 기본 자료형
코틀린은 자바의 "int" 와 같은 기본 자료형이 존재하지 않는다. 즉 레퍼런스 타입만 지원함 (ex : Int, String ..)
물론 컴파일 단계에서 jvm에 적재될 때 가장 최적화된 방식으로 동작하게 된다. - static 키워드(정적 멤버)
메모리의 method 영역에 적재하는 변수와 메서드인 static 키워드가 존재하지 않는다. 대신 패키지 수준의 최상위 함수인 "companion object" 를 통해 정적 멤버로 사용할 수 있다 - 삼항연산자
코틀린의 if - else문은 자바와 달리 "구문"이 아니라 "표현식"이기 때문에 아래와 같이 if - else문을 통해 삼항연산자처럼 사용할 수 있다.
val c = if (b > a) b else a
2. 코틀린에는 있지만 자바에는 없는 것
- 확장
개발자가 임의로 객체의 함수나 프로퍼티를 확장하여 사용이 가능하다.
fun String.first(): Char {
return this[0]
}
- 데이터 클래스
주로 DTO(Data Transfer Object)의 역할을 하는 불변 객체이다. 자바에서 JDK 15 이전에는 Lombok 라이브러리를 사용하여 구현했고, 이후에는 record 가 추가되어 유사한 역할을 한다.
equals(), hashcode(), toString() 메서드를 자동으로 생성해주는 장점이 있다.
data class Person(val name: String, val age: Int)
- Null Safety
NPE(Null Pointer Exception)이 발생할 가능성은 제거하기 위한 기능을 기본적으로 제공한다. 자바에서도 Optional로 객체를 래핑할 수 있게 지원하지만, 새로운 객체 생성에 따른 오버헤드가 발생할 수 있다.
var a : String? = null
a.length // 컴파일 오류
a?.length // safe-call 정상
a!!.length // Null이 아니라고 확신하는 경우
이 외에도 다양한 차이가 있으나 대표적이고 기본적인 몇가지 차이들만 나열해 보았다.
이후 코틀린 기반의 스프링 프로젝트를 진행하면서 내용을 더 정리해보고자 한다.
이 내용은 패스트캠퍼스의
"실무 프로젝트로 배우는 Kotlin & Spring : 리팩토링부터 서비스 구현까지"
강의의 내용을 기반으로 작성하였다.
(https://fastcampus.co.kr/dev_online_kopring)
실무 프로젝트로 배우는 Kotlin & Spring : 리팩토링부터 서비스 구현까지 | 패스트캠퍼스
카카오페이, 레진코믹스에 Kotlin을 도입한 현직 개발자에게 배우는 Kotlin & Spring! Kotlin 문법 기초부터 고급, 그리고 Java 프로젝트에 Kotlin 도입하기 까지, 실무 예제를 활용한 Kotlin 리팩토링 실습과
fastcampus.co.kr