질문 정리

왜 코틀린인가요?

five2week 2023. 6. 27. 02:19

 

새 프로젝트를 시작할 때가 되면 그때의 환경에 맞게 기술스택과 언어등을 정하게 됩니다. 3년정도 전부터 안드로이드 프로젝트를 할 때, 코틀린을 사용해왔는데 이쯤되니 왜 코틀린을 사용하게 되었는지 기억이 나지 않아서 생각난 김에 정리를 하게 되었습니다.

코틀린이란 무엇인가?

코틀린(Kotlin)은 JetBrains가 2011년에 개발한 정적 타입의 프로그래밍 언어입니다. 코틀린은 현대적인 프로그래밍 언어가 가져야 할 특징들을 갖추고 있으며, JVM(Java Virtual Machine), Android, 브라우저, 네이티브 환경에서 동작합니다.

코틀린은 다양한 플랫폼에서 사용될 수 있도록 설계되었으며, Java와 완벽하게 호환될 수 있습니다. 이 때문에 기존의 Java 코드를 변경하지 않고도 코틀린 코드를 추가하거나, 기존의 Java 프로젝트를 코틀린으로 점진적으로 변환하는 것이 가능합니다.

코틀린의 문법은 Java보다 훨씬 간결하며, 표현력이 뛰어나고 직관적입니다. 예를 들어, 코틀린에서는 변수를 선언할 때 val과 var 키워드를 사용하며, 타입을 추론할 수 있어 명시적인 타입 선언이 필요 없습니다.

또한, 코틀린은 Null 안전성을 제공합니다. 코틀린에서는 모든 타입이 기본적으로 null을 가질 수 없으며, null을 허용하려면 명시적으로 타입 뒤에 물음표(?)를 붙여야 합니다. 이러한 특징은 null 포인터 예외를 컴파일 시간에 잡아낼 수 있게 해줍니다.

2017년에는 Google이 Android 개발의 공식 언어로 코틀린을 선정했습니다. 이로 인해 Android 앱 개발 분야에서 코틀린의 사용률이 크게 증가하였고, 많은 개발자들이 코틀린을 배우고 사용하게 되었습니다.

코틀린 특징

코틀린은 안전성, 간결성, 상호 운용성을 강조하는 다중 패러다임, 다중 플랫폼 프로그래밍 언어입니다. 아래의 내용은 공부했던 코틀린 완벽 가이드의 내용을 정리한 것입니다.

안전성

프로그래밍 언어가 안전하려면 프로그래머의 오류를 방지할 수 있어야 한다. 컴파일러에게 프로그램에 대한 정보를 더 자세히 알려주거나 컴파일러가 더 오랫동안 프로그램이 올바른지 추론하게 한다(또는 두가지를 다 할 수 있다). 코틀린의 설계 목표 중 하나는 황금비를 찾아내는 것이었다. 즉, 자바보다 더 안정성을 보장하는 언어를 설계하되, 자바보다는 개발자의 생산성을 덜 해치는 언어를 만드는 것이었다.

타입추론(type inference)으로 인해 개발자가 명시적으로 타입을 지정하지 않아도 된다.(자바10에도 지역 변수에 대한 타입 추론이 도입됐다).
nullable type을 통해 null의 사용을 제한할 수 있고, NullPointerException 예외를 좀 더 쉽게 방지할 수 있다.
스마트 캐스트(smart cast)를 통해 타입을 안전하게 변환할 구 있고, 실행 시점에 타입 캐스트 오류를 방지할 수 있다.

다중 패러다임

초기에 코틀린이 다중 패러다임이라는 말의 의미는 자바와 같은 전형적인 주류 프로그래밍 언어가 지원하는 일반적인 객체지향 패러다임 외에 함수형 프로그래밍을 지원한다는 뜻이었다. 코틀린은 처음부터 필요한 도구를 제공했다. 특히 함수 타입을 부드럽게 조화시킨 타입 시스템(type system)과 함수 타입의 값을 코드 블록에서 만들어낼 수 있는 람다를 처음부터 제공했다. 표준 라이브러리나 외부 프레임워크도 함수형 프로그래밍 스타일을 장려하는 방대한 API를 제공한다. 자바도 자바8부터 함수형 프로그래밍을 지원했으므로, 요즘은 그중 상당수가 자바에도 도입됐다. 하지만 자바의 표현력은 코틀린의 표현력에 비해 상당히 떨어진다.
코틀린 언어가 성장해 나가면서, 두 가지 프로그래밍 패러다임을 더 지원하기 시작했다. API를 도메인 특화 언어(Domain Specific Language, DSL)로 정의할 수 있는 기능 덕분에 코틀린을 선언적인 스타일로 코딩할 수 있다. 여러 코틀린 프레임워크는 범용 프로그래밍 언어에서 제공하는 타입 안정성이나 표현력을 해치지 않으면서 DSL을 제공한다.
또 한 가지 패러다임은 동시성(concurrent) 프로그래밍이다. 코루틴을 도입하면서 코틀린도 동시성 프로그래밍을 지원하기 시작했다. 자바를 포함한 여러 언어가 동시성을 지원하지만, 코틀린은 새로운 프로그래밍 접근 방법을 가능하게 해주는 풍부한 프로그래밍 패턴을 제공한다.
이 모두를 한꺼번에 제공하기 때문에 다중 패러다임은 언어의 표현력을 늘려주며, 언어를 더 유연하고 다용도에 사용할 수 있는 도구로 만들어준다.

간결성과 표현력

개발자 생산성은 다른 사람이 짠 코드를 보든 본인 스스로가 짠 것을 한참 후에 보든 관계없이, 빠르게 읽고 이해할 수 있는 코드를 작성할 수 있는지와 주로 연관돼 있다. 어떤 코드 조각의 의미를 이해하려면 그 조각이 프로그램의 다른 부분과 어떤 관계인지를 빠르게 이해해야 한다. 그래서 기존 코드의 의미를 파악하는 것이 새로 코드를 작성하는 것보다 일반적으로 시간이 더 오래걸리고, 언어의 간결성, 즉 프로그래머의 의도를 잡음 정보 없이 명확하게 표현할 수 있는 능력이 개발 도구인 프로그래밍 언어에서 중요하다.
코틀린 설계자들은 필드 게터(getter)나 세터(setter), 익명 클래스, 명시적인 위임 등과 같은 자바의 불필요한 준비 코드를 제거하고 언어를 가능한 한 간결하게 만들기 위해 노력했다. 반면 코틀린 설계자들은 간결성을 너무 과용하지 못하게 주의를 기울였다. 예를 들어, 스칼라와 달리 코틀린에서는 커스텀 연산자를 정의할 수 없고 기존의 연산자만 재정의 할 수 있다. 이는 새 연산자로 인해 연산의 의미가 오히려 혼란스러워 지기 때문이다. 코틀린 간결정의 또 다른 측면은 DSL과 밀접히 연관된다. DSL은 문법적인 잡음을 최소화하면서 특정 프로그래밍 범위에 대한 기술을 아주 간결하게 만들어준다.

상호 운용성

코틀린은 독립적으로 존재하는 언어가 아니며 가능한 한 기존의 자바 코드 기반과 부드럽게 협력해야한 했으므로, 자바 상호 운용성은 코틀린 설계 시 중요한 목적이었다. 그래서 코틀린 설계자들은 기존의 자바 코드를 코틀린에서 사용할 수 있게 했을 뿐만 아니라. 코틀린 코드를 거의 아무런 노력을 들이지 않고도 자바에서 사용할 수 있게 보장하기 위해 노력했다. 코틀린 언어는 자바와 코틀린의 상호 운용성을 조절하기 위한 몇가지 기능도 포함한다.
코틀린이 JVM을 능가하고 다른 플랫폼으로 퍼져 나감에 따라 상호 운용성 보장은 자바스크립트, 스위프트, C/C++ 코드와의 상호 작용까지 포함하는 범위로 확장됐다.

다중 플랫폼

코틀린 설계자들의 원래 의도에 다중 플랫폼은 없었다. 하지만 코틀린 언어가 진화하고 채택됨에 따라 개발자 커뮤니티에 의해 다중 플랫폼 지원의 필요성이 제기됐다. 여전히 JVM과 안드로이드가 코틀린 개발의 주 대상이지만, 요즘 코틀린은 다음과 같은 플랫폼도 지원한다.

  • 브라우저나 노드 애플리케이션, 자바스트립트 라이브러리까지 포함하는 자바스크립트 지원
  • macOS나 리눅스, 윈도우 라이브러리 및 애플리케이션을 포함하는 네이티브 지원
    코틀린 1.3 버전부터 다중 플랫폼 개발을 지원하며, 주된 용례로는 안드로이드와 iOS 애플리케이션 사이에 코드 기반을 공유하거나 JVM/JS/네이티브 세계에서 사용할 다중 플랫폼 라이브러리를 만드는 것 등이 있다.

코틀린이 안드로이드에서 선호되는 이유

  1. 공식 언어: Google이 Android의 공식 언어로 코틀린을 선정하였습니다. 이는 코틀린에 대한 끊임없는 업데이트와 지원을 보장하며, Android 개발에 필요한 새로운 기능이나 라이브러리가 먼저 코틀린에서 지원될 가능성이 높습니다.
  2. 간결한 문법: 코틀린은 자바보다 간결하고 직관적인 문법을 가지고 있습니다. 이를 통해 코드 라인 수를 줄이고 가독성을 높여줍니다. 예를 들어, 코틀린에서는 POJOs (Plain Old Java Objects)를 data class로 간단히 표현할 수 있으며, 자바보다 간결하게 람다 표현식을 사용할 수 있습니다.
  3. Null 안전성: 코틀린은 타입 시스템에 null 안전성을 내장하고 있습니다. 즉, 참조는 기본적으로 null을 가질 수 없으며, null을 허용하려면 타입에 명시적으로 ?를 붙여야 합니다. 이렇게 함으로써 NullPointerException을 컴파일 시간에 방지할 수 있습니다.
  4. 상호 운용성: 코틀린은 Java와 100% 상호 운용 가능한 언어입니다. 이는 기존의 Java 프로젝트를 코틀린으로 점진적으로 전환하는 데 큰 장점이 됩니다. 코틀린은 Java 라이브러리와 프레임워크를 그대로 사용할 수 있어, 기존의 Java 기반 코드와 새로운 코틀린 코드가 함께 동작할 수 있습니다.
  5. 코루틴: 코틀린은 코루틴을 지원하며, 이는 비동기 프로그래밍을 간편하게 해줍니다. callback을 사용한 비동기 코드를 동기식으로 작성하는 것처럼 보이게 할 수 있어 코드의 가독성이 크게 향상됩니다. Java에서는 이와 유사한 기능을 제공하지 않아, 비동기 프로그래밍을 할 때 callback이나 futures를 사용해야 합니다.

이 외에서 스마트캐스팅, 익스텐션함수, 데이터 클래스 등 여러 장점이 있습니다. 그리고 이러한 이유로, 많은 개발자들과 팀들이 안드로이드 개발에 코틀린을 선호하며, 코틀린의 인기는 계속해서 상승하고 있습니다. 하지만, 기술 선택은 여전히 개별 프로젝트나 팀의 상황, 요구 사항, 기술 역량 등을 고려해야한다고 생각합니다. 또한, 각자의 언어가 제공하는 이점을 이해하고, 이를 본인의 상황에 맞게 적용하는 것이 가장 좋은 사용 방법이라고 생각합니다.

 

출처
코틀린 완벽 가이드(알렉세이 세두노프 지음, 오현석 옮김)
http://www.yes24.com/Product/Goods/107698728?pid=157529&napm=ct%3dl6ugb4c0%7cci%3dcb095d505b9655f3b3f679d9b4017b46080cf31c%7ctr%3dboksl1%7csn%3d187110%7chk%3d7064e580fb957a5dcd43d9b971d01489cba57fcc
 

코틀린 완벽 가이드 - YES24

`코틀린 현업 개발자인 저자와 역자의 노하우가 듬뿍 들어간, 최신 코틀린 종합 가이드! 코틀린의 기초, 심화, 활용을 한 권에 담았다. 코틀린 언어의 기초 개념과 핵심 문법, 기능을 소개하고(기

www.yes24.com