Scala와 Kotlin 비교

최근 함수형 언어(FP) 를 학습하기 위해 스칼라와 코틀린을 비교하다 정리하게 되었습니다.
이 포스팅은 함수형 프로그래밍에 대한 글이 아니기 때문에 바로 스칼라와 코틀린을 비교해보도록 하겠습니다.
혹시 함수형 프로그래밍이 궁금하시다면 함수형 프로그래밍 요약을 참고해주세요!


Scala

scala_logo
스칼라는 확장된 자바 를 지향하며 다중 OOP특성과 FP특성을 함께 가진 다중패러다임 언어입니다.
그러한 철학은 스칼라 라는 이름에서도 볼 수 있는데, 스칼라는 Scalable(확장가능한) + Language(언어) 라는 단어의 결합으로 탄생한 이름입니다.
EPFL대학의 마틴 오더스키가 만들었으며 그가 제작한 강의이 있습니다.
매우 강력하며 세심하게 디자인 되었지만 그 만큼 제대로 공부하고 사용하는것이 어렵다는 평을 받고 있습니다.
함수형으로나 객체지향적으로 원하는 모든 기능(큰 자유와 수많은 기회)을 제공합니다.
심지어 JVM에서 벗어나 컴파일 언어가 되는 작업을 진행하기도 합니다.
Java에는 없는 많은 기능이 포함되어 있으며 동시 처리등의 큰 데이터 처리작업에 적합합니다.

장점

  • 강력한 OOP 스타일의 FP 기능
    1급 객체(1급 시민), 고차 함수, 순수 함수, 불변성, 합성 함수 등을 잘 지원합니다
  • 쉬운 언어 확장 및 DSL
  • 자바와 코틀린에는 없는 기능 지원
    패턴 매칭, 매크로 및 상위 유형의 완벽한 지원, 동시 처리 지원 등
    (코틀린에도 코루틴이 있지만 스칼라의 future은 더욱 다양하게 사용 가능합니다)
  • 연산자 오버로딩
    이 기능은 코틀린에도 있지만 스칼라의 연산자 오버로딩은 새로운 연산자를 정의할 수 있습니다.
  • 코틀린에 비해 자료 및 라이브러리가 많습니다.
    스칼라는 2004년에 나온 언어로 코틀린에 비해 자료와 라이브러리가 풍부합니다.
    스택오버플로우(2019.7 기준)에서 약 7만건정도 차이나는 것을 알 수 있습니다.
  • Java와의 호환성
    Java와의 호환성이 좋습니다. 스칼라에선 자바코드를 100% 가져다 쓸 수 있습니다.

단점

  • 러닝커브가 높습니다.
    많은 자바 개발자들은 스칼라의 복잡성 때문에 당황했으며 높은 학습비용은 포기하는 이유가 되었습니다.
  • 컴파일 속도가 느리며 jar 파일 용량이 큽니다.
    이것은 사람들이 말하는 스칼라의 가장 큰 단점 중 하나입니다.
  • 이전 버전 컴파일이 어렵습니다(몇몇 버전은 이전 버전과 호환되지 않습니다)
  • null safety한 측면에서 코틀린보다 별로입니다.
  • scala 2.1.1의 경우 자바 1.8 부터 호환이 가능합니다.
    따라서 자바 1.8이하의 기존 레거시 코드와 같이 사용할 수 없습니다.
    또한 자바에서 스칼라코드를 가져와서 그대로 쓸 순 없습니다.

일각에선 스칼라는 어렵기 때문에 자바 > 코틀린 > 스칼라순으로 공부하는 것을 추천하기도 합니다.

Kotlin

kotlin_logo

코틀린은 더 나은 자바 를 목표로 한 언어입니다.
코틀린은 보일러플레이트 코드를 줄이며, null safety 한 기능을 제공하는 등 자바의 부족한 기능을 보완한 언어입니다.

장점

  • 젯브레인사 에서 만든 언어이며 구글 안드로이드 공식 언어로 채택되었습니다.
  • 강력한 null safety 기능을 제공합니다.
  • 러닝커브가 낮습니다. 자바 개발자는 금방 코틀린에 적응할 수 있으며 쉽게 사용할 수 있습니다.
  • Java 1.6 부터 호환이 가능하므로 기존 자바 레거시 프로젝트와의 결합이 용이합니다.

단점

  • Java 100% 호환 이지만 자바 서드파티들과 호환이 다 되는 것은 아닙니다.(하지만 스칼라보단 호환이 좋습니다)
  • OOP와 FP둘다 가능한 멀티 패러다임 언어지만 Scala에 비해 다소 미약한 FP를 지원합니다.(이것은 객관적인 단점이라기보단 언어의 특성, 철학 때문입니다)
  • 다소 아쉬운 동시성을 지원합니다.

마무리

일반적으로 스칼라와 코틀린은 자바에 대한 대안입니다. 그러나 두 언어는 확연히 다른 언어입니다.

스칼라는 잘 쓰면 고급 함수 프로그래밍에 대한 강력한 자원을 제공 하지만 잘못 쓰게되면 금새 엉망이 되어버립니다.
코틀린은 스칼라에 비해 다소 약한 FP를 지원하지만 배우기 쉽고 사용하기 쉬우며 자바만큼 빠른 컴파일 속도 및 가벼운 jar를 만들 수 있습니다.
완벽한 100% FP는 없습니다. 얼마나 더 FP 하냐의 차이입니다. 그런 부분에 있어서 스칼라가 코틀린에 비해 더 FP할 수 있는 기능을 제공합니다.
저는 좀더 FP한 언어를 원했기 때문에 스칼라를 선택했습니다.
여담으로 스칼라는 안드로이드 포팅이 어렵기 때문에 코틀린이 좋습니다.
두 언어는 철학부터 다르기 때문에 본인에게 필요한 언어를 파악해 잘 선택하는것이 중요하겠습니다.

큰 데이터로 작업을 하거나 속도를 높이고 싶으면 스칼라가,
배우기 쉬우며 향상된 자바를 원하면 코틀린을 선택하는 것이 좋을 것 같습니다.

읽어주셔서 감사합니다. 혹 글에 오류/추가할 내용이 있다면 코멘트 남겨주세요!🙆

참고