티스토리 뷰

Java

Kotlin vs Java

§무명소졸§ 2021. 7. 21. 11:04

코틀린은 IntelliJ 라는 유명한 유료IDE를 만든 JetBrains라는 회사에서 만든 프로그램 언어이다. JVM에서 동작하고 JAVA와 친척쯤 되는 느낌이 있다. 실제로 몇 가지 디펜던시를 포함하면 하나의 프로젝트에서 동시에 2가지 언어를 사용해서개발이 가능하다. 오늘은 이런 Kotlin 에 대해서 간략히 소개하고 코드에서 Java 와 어떤 차이점이 있는지 확인해보겠다.

Kotlin Island

코틀린은 발트해 있는 러시아의 한 섬의 이름을 따서 만들었다고 한다. 자바가 자바섬에서 따서 만들었다는것에 영감을 얻었다는데 사실 여부는 잘 모르겠다. 아래 사진은 코들린이라는 섬의 위치인데 젯브레인은 체코 회사이다. 하지만 지도의 표시된 위치는 러시아 발트해 앞인데 그 곳에 젯브레인사의 R&D 본부가 있다고 한다.

Kotlin History

코틀린은 2011년 7월 JetBrains 에서 최초 공개했다. 이제 막 10년 됐으니 다른 언어에 비해서는 꽤 젊은 언어이다. 이후 2017년 5월에 Android 공식 언어로 채택됐다. 당시 정확힌 무슨 행사인지 모르겠으나 여성 강연자가 공지하고 사람들이 환호했던 장면이 기억난다. 2021년 5월 기준 v1.5가 출시됐다.

https://www.theverge.com/2017/5/17/15654988/google-jet-brains-kotlin-programming-language-android-development-io-2017

멀티 패러다임 프로그래밍 언어

코들린은 스칼라와 같은 다중패러다임 언어이다. 자바와 같은 객체지향 특성과 함수형 언어의 특징을 가지고 있다. 또한 Python 이나 자바스크립트 처럼 스크립트 파일만으로도 실행이 가능하다. 그리고 최근에 많이 언급되고 있는 비동기 리엑티프 프로그래밍 또한 Coroutine 을 이용해 좀 더 쉬게 처리할 수 있다. 코틀린은 이용하면 기존 자바 언어를 이용할 때 보다 빠르고 안전하게 코드를 작성할 수 있고 성능 향상을 기대할 수 있다. 자바의 보일러플레이트를 삭제하기 위해 언어 차원에서의 고민이 느껴지고 무엇보다 스프링에서 공식 지원하기 때문에 꼭 안드로이드 개발자가 아니여도 스프링 자바를 이용해 웹 개발을 하고 있다면 충분히 배워볼 가치가 있는 언어라고 생각한다.

Java & Kotlin Code

언어에 관련된 좀 더 많은 내용은 뒤로하고 실제로 자바 와 코틀린 코드를 비교해 코틀린의 매력을 코드로 직접 느껴보자.

Boilerplate

자바에서 데이터 캡슐화 원칙에 의해서 멤버 필드에 접근을 위해서 관례적으로 setter getter 메서드를 생성해줘야 된다. getter setter 뿐만 아니라 생성자와 같은 필수적인 코드가 들어가는데 반복적이고 거추장스럽다. 물론 lombok 과 같은 라이브러리를 이용하면 생략할 수 있지만 코틀린은 언어 차원에서 불필요하고 반복적인 코드들을 제거했다. 아래 왼쪽의 자바 코드는 일부 생략된 부분이 있는데 반면에 코틀린 코드는 정말 Simple 한걸 확인할 수 있다.

Try Catch

try catch 를 강제하는 Checked Exception 은 자바 최초 설계시 만들어졌다. 그 후 오랬동안 이어져 왔는데 사람들은 그것이 올바른 설계였는가에 대해 의심한다. 코틀린에서는 자바에서 와 같은 강제적인 예외처리를 제거했다.

Default Argument

전달값이 null일 경우 default 값을 할당해주는 기능은 다른 언어에서 많이 지원한다. 자바에는 존재하지 않지만 코틀린에서는 아래와 같이 default 값을 설정할 수 있다.

Readable Argument

메서드의 인수가 많을 경우 해당 인수의 순서나 의미를 착각하기 쉽다. 물론 IDE에서의 지원 기능을 통해 확인 가능하지만 그걸 배제하고 아래 코드만 봤을때 코틀린의 가독성이 훨씬 좋은 것을 확인할 수 있다. 물론 예제에서 메서드에 파라메터 값이 너무 많기는 하다. 저럴 경우 DTO 클래스를 이용하는게 올바른 코딩일 것이다.

== , ===

자바스크립트나 기타 언에서 지원하는 연산자이다. 단순히 값 뿐만 아니라 TYPE 까지 비교한다.

구조분해 Pari, Triple

true,false 제어 조건을 확인함과 동시에 해당하는 값을 확인하고 싶을 때 유용하다. 그래서 짧지 않은 개발 경력 기간동안 개발을 하면서 이와 같은 필요를 느낀 경우가 제법 있는 것 같다. 코틀린에서는 Pair , Triple 과 같은 자료형을 통해 해결할 수 있다. 물론 기본적으로 제어와 조회의 로직을 한 개의 함수에 포함시키는것은 좋은 코드는 아니다.

Nest loops Nulll Check

최신 Javascript 에도 포함된 null 체크 제어문이다. 방금전 예시와 같이 개발하면서 정말 많이 느꼈던 부분인데 코틀린에서는 DTO 에 Nest 된 DTO 에 null 체크를 아주 간단하게 처리할수 있다. 왼쪽 자바코드에 비해 코틀린 코드는 정말 간결하고 가독성이 좋다.

Smart casting

인터페이스를 받아 각 각 상속받는 객체들의 특성 메서드를 호출하기 위해서 자바에서는 아래와 같이 객체 확인이후 객체를 캐스팅해야된다. 코틀린에서는 WHEN 절을 통해 체크후 바로 캐스팅을 암묵적으로 해준다. 아마 타입체크 후에는 반드시 해당 객체로서 이용할 것이기에 언어 내부적으로 캐스팅 작업을 생략한다.

Coroutine

왼쪽은 비동기 처리를 위해 callback 메서드를 이용한 자바 코드이다. callback 패턴을 말할 때 꼬리표처럼 따라오는 callback 헬(류의 파동권 그림은 너무 유명하다.) 에 대한 이야기는 많다. 물론 Promise 패턴을 이용해 좀더 나은 코드를 작성할 수 있지만 코틀린에서는 Coroutine 을 이용해 좋은 성능과 가독성 높은 코드를 작성할 수 있다. 코루틴은 단순한 내용은 아니니 한 번 찾아 보기를 권한다.

마치며

몇가지 코틀린 특성을 알아 볼 수 있는 코드를 살펴보았다. 코틀린 언어를 만든 개발자들의 고민이 느껴지는 부분이 많고 새로운 프로젝트는 코틀린으로 개발하고 싶은 생각이 든다. 물론 자바개발자가 바로 코틀린을 사용할 수 있을 만큼 마냥 쉬운 언어는 아니다. 오히려 객체지향과 함수형 패러다임을 다 가지고 있기 때문에 더 많은 개념적 이해가 필요할 수 있다. 하지만 요즘 네카라쿠배당토로 불려지는 메이저 서비스 회사들이 신규 서비스를 자바에서 코틀린으로 옮겨 개발하는 모습을 분명 자바 진영에도 변화의 바람이 불고 있으니 도전 해볼만한 가치가 있다고 생각된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크