티스토리 뷰

SW 개발/Kotlin

Kotlin, 기본 특징 및 전망 정리

지단로보트 2019. 11. 5. 13:53

Kotlin은 어떤 언어인가?

  • Kotlin은 세계 최고의 상용 개발 도구인 IntelliJ IDEA의 개발사로 유명한 JetBrains가 만든 개발 언어이다. Java 언어에 조예가 깊은 전문가 집단이 엔터프라이즈 레벨의 애플리케이션을 최소의 공수로 유지보수가 쉽도록 새롭게 만든 언어라고 말할 수 있다. 2011년 첫 공개 후 베타 기간을 거쳐 2016년 1.0이 공개되었으며 2020년 현재 1.3.70이 출시된 상태이다. (참고로 JetBrains는 러시아와 체코 출신 개발자로 구성되어 있으며, Kotlin은 러시아에 위치한 섬의 이름이다.)

Kotlin의 미래는 밝다.

  • KotlinJetBrains가 처음 만들었고, 버전 업을 활발히 주도하고 있다. Java, Python, PHP 진영 통틀어 세계 최고의 개발 도구 제작업체가 이 언어를 책임 지고 있다는 것은 앞으로도 망할 가능성이 적다는 의미로 해석될 수 있다.
  • 더 흥미로운 사실은 2017년 구글이 안드로이드의 공식 언어로 Kotlin을 채택했다는 것이다. 2년이 지난 현재 시점에서 구글이 발행하는 모든 레퍼런스 문서에서 Kotlin을 최우선으로 언급하고 있는 것을 확인할 수 있다. (또한, 안드로이드의 공식 개발 도구인 Andorid Studio는 바로 JetBrains가 만들었다.)

Kotlin은 Java보다 간결하다.

  • 스크립트 기반의 타언어에서 Java로 넘어온 사람이 느끼는 가장 큰 당혹감은 장황함이다. 단순히 데이터를 담기 위한 목적인데, Getter, Setter, Equals, HashCode, ToString 등의 반복적인 행위를 매번 직접 구현해야 한다. Lombok이라는 외부 라이브러리를 사용해서 해결하기도 하지만, Java라는 언어 자체가 가진 낙후성과 비생산적인 느낌을 피하기는 힘들다. Kotlin은 언어 레벨에서 data 클래스 한방으로 위 문제를 깔끔하게 해결했다. Java 개발자가 Kotlin에 입문하면 다시는 못 돌아가는 이유이다.
  • KotlinJava의 최고 전문가들이 오랫동안 고민한 결과를 담아낸, 가장 진보된 언어 중 하나이다. 기본 문법과 기본 라이브러리 곳곳에서 이러한 간결한 설계 철학을 확인할 수 있다. Kotlin의 간결함이 주는 또다른 매력은 이 언어가 간결함을 위해 소스 코드의 가독성을 희생하지 않았다는 것이다. 작정하고 어렵게 짜지 않는 이상 코드 리딩이 어려운 경우는 거의 없다.
  • Kotlin 기본 문법의 간단한 예는 본 블로그의 이 글을 참고한다.

Kotlin은 배우기 쉽다.

  • 책에 나오는 예제가 아닌 운영 서비스 중인 Java의 애플리케이션 코드를 Java를 처음 배우는 사람에게 설명하기란 쉬운 일이 아니다. Kotlin은 언어 레벨에서 장황함을 제거하였다. 즉, 기본 문법에서 외울 부분을 최소화하고, 로직 구현에 필요한 소스 코드를 줄였기 때문에 처음 배우는 사람에게 전혀 부담 없는 언어라고 말할 수 있다. (외국의 통계에서는 Java 개발자가 Kotlin 소스 코드를 이해하는데 1시간이 걸렸고, 3일이면 완전히 적응하였다고 한다.)

Kotlin은 Type-Safe에 친화적인 언어이다.

  • Type-Safe란, 데이터 관점에서 의미를 가지는 특정 변수의 형식을 소스 코드 레벨에서 명시적으로 강제하는 것을 의미한다. 예를 들어 회원의 성별을 담는 변수라고 하면 여기에는 MALE, FEMALE이 아닌 다른 값이 담기지 못하며, 이 값이 전혀 다른 타입으로 변경되지 않도록 보장하는 것이다.
  • Java가 전세계적으로 오랫동안 백엔드에서 왕좌의 자리에 있었던 것은, 바로 언어 레벨에서 Type-Safe를 권장하고 지향한다는 점 때문이다. Type-Safe가 잘 고려되어 설계된 엔터프라이즈 애플리케이션은, 오류가 개발 컴파일 단계에서 사전에 발견된다. Type-Safe에 대한 고려 없이 당장의 생산성만 생각하고 설계하면, 오류가 배포 후 특정 상황에서만 예기치 않게 발견된다. 금방 고쳐서 재배포하는 간단한 애플리케이션이라면 상관 없지만, 돈을 다루는 중요 서비스에서는 용납이 되지 않는 상황이다. 가장 보수적인 금융권이 Java를 고집하는 이유이다. (한편, JavaScript와 이를 기반으로 한 Node.js, 그리고 Python은 이와 완전히 반대편이 있는 동적 타입 언어이다. 프론트엔드 진영은 JavaScript 언어가 가진 높은 자유도와 동적 타입 특성 때문에, 대규모 인원이 참여하는 엔터프라이즈 레벨 애플리케이션의 오류가 감당하지 못할 정도로 많아지자, 강력하게 Type-Safe를 통제하기 위해 MicrosoftTypeScript를 발표하여 대중화되기도 했다.)
  • 장점만 있는 것은 아니다. Java는 이러한 특징 때문에 타언어 대비 문법적인 장황함과 비생산성이 단점이다. 하지만, Kotlin의 등장으로 Type-Safe의 강점을 그대로 유지하면서 간결함과 생산성까지 모두 장점으로 가지게 되었다. 추가로, KotlinJava에는 없는 변수에 대한 Null 체크까지 지원한다. 따라서, KotlinType-Safe에 매우 친화적인 언어라고 말할 수 있다. (실제로 HTML, CSS 문법을 Kotlin을 통해 DSL로 해결하여 재사용성을 높이고 오류를 원천 봉쇄하려는 시도가 진지하게 진행되고 있다.)

Kotlin, Java는 혼용이 가능하다.

  • Kotlin의 장점을 인지했다고 쳐도 기존의 Java로 개발된 레거시 서비스를 모두 Kotlin으로 바꾼다는 것은 한숨이 나오는 일이다. 방법이 없을까? 사실 앞서 언급한대로 Java, Kotlin은 같은 JVM 생태계를 공유하는 형제 지간이므로 기존의 Java로 개발된 프로젝트에서 자유롭게 Kotlin을 혼용해서 사용할 수 있다. 새로운 기능만 Kotlin으로 작성하는 것도 가능하고, 기존의 개발된 클래스를 Kotlin에서 사용하는 것도 얼마든지 가능하다. 새 기능만 구현할지, 전체를 바꿀지는 전적으로 개발자의 몫이다.
  • Spring Boot 기반 프로젝트에서 두 언어를 혼용하는 방법은 본 블로그의 이 글을 참고한다.

Kotlin은 Java의 라이브러리, 프레임워크를 사용할 수 있다.

  • Java는 1995년 처음 공개된 매우 성숙한 언어이다. 그동안 전세계의 수많은 유능한 개발자들이 무료로 공개한 라이브러리와 프레임워크의 수가 어떤 언어보다 풍부하다고 말할 수 있다. 앞서 언급했듯이, KotlinJava와 혼용할 수 있기 때문의 라이브러리 및 프레임워크 또한 그대로 사용할 수 있다. 실제로 데이터베이스 관련 작업의 경우 Java 진영이 자랑하는 JPA, Hibernate, Spring Boot Data JPA, Querydsl 기술 조합에 Kotlin을 결합하면 상당한 생산성을 확보할 수 있다.

Kotlin, Java는 성능이 동일하다.

  • Java, Kotlin으로 작성된 소스 코드를 각각 컴파일하면 실제 운영 환경에서 실행 가능한 .class 확장자를 가진 바이트 코드로 변환되는데, 이는 두 언어의 최종 결과물이 결국 동일하다는 것을 의미한다. (동일한 결과물에 성능을 논할 수 없는 것은 당연하다.) 따라서, 기존의 JVM이 설치되어 있는 어떤 운영 환경에서도 해당 바이트 코드를 그대로 실행할 수 있다. 한 프로젝트 내에서 Java, Kotlin 언어의 혼용이 자유롭게 가능하고, Kotlin 소스 코드에서 Java 소스 코드 및 라이브러리를 전혀 문제 없이 사용할 수 있는 이유이기도 하다.

Kotlin은 JVM 생태계 안에 있다.

  • Java 또는 Kotlin 언어로 작성된 소스 코드의 컴파일된 결과물을 실행하는 주체를 JVM(Java Virtual Machine)이라고 부른다. JVM의 개발은 오라클의 소유 하에 여러 세계적인 IT 업체들이 참여하고 있다. 무료 JVM의 대표주자로서 미국의 Azul Zulu이 있으며, 최근에는 Amazon 또한 자신들의 EC2 인스턴스에 최적화된 JVMAmazon Corretto를 공개하기도 했다. (JVM과 관련된 자세한 내용은 본 블로그의 이 글을 참고한다.)
  • Kotlin으로 개발한다는 의미는 곧, 이러한 세계적으로 막강한 생태계의 고성능의 JVM 환경 하에 서비스를 운영할 수 있다는 것을 의미한다.

참고 글

댓글
  • 프로필사진 네이슨 동의합니다... 요즘 ios 다시 하면서 느끼는데 kotlin은 다른 3세대 언어들과 확실히 다르다른걸 뼈져리 느끼고있습니다.. 2020.07.15 11:14
  • 프로필사진 BlogIcon 지단로보트 @네이슨 최근 레거시를 리뉴얼하는 프로젝트를 리드해보니 Kotlin이 아닌 Java였으면 그 복잡하게 꼬인 엔티티 관계를 어떻게 DTO로 가공했을지 식은땀이 흐릅니다. 당분간 Type-Safe 계열 언어에서는 최강자의 위치에 있지 않을까 생각합니다. 2020.07.16 05:54 신고
댓글쓰기 폼