본문 바로가기
[개발] 언어/Kotlin

코틀린 소개

by Devsong26 2024. 7. 29.

최근 코틀린이 서버 사이드 언어로 많이 부상한 것을 느끼고 있습니다. 

아래는 2021 ~ 2024년까지 스택오버플로우에서 조사한 프로그래밍 언어 시장 점유율 중 자바와 코틀린을 비교한 것입니다.

 

파란색: 코틀린, 빨간색: 자바, 세로축: 퍼센트

2021 조사

2022 조사

2023 조사

2024 조사

 

자바의 시장 점유율은 해마다 점점 떨어져 30퍼센트에 다다랐고 코틀린은 조금씩 증가하여 10퍼센트에 다다르고 있습니다. 자바가 파이썬과 자바스크립트에 점점 밀려나는 와중에 코틀린이라는 자바의 100% 호환되는 언어가 등장한 것은 반가운 일이라고 생각이 됩니다. 개인적으로 코틀린과 자바 영역의 시장 점유율이 높아지길 바라며 코틀린에 대해서 소개해보려고 합니다.

 


 

코틀린 소개

 

코틀린(Kotlin)은 JetBrains에서 개발한 정적 타입(static type)의 프로그래밍 언어로, JVM(Java Virtual Machine) 위에서 실행되도록 설계되었습니다. 또한, JavaScript나 네이티브 코드(예: iOS 및 Android)를 타겟으로 하는 크로스 플랫폼 애플리케이션 개발도 가능합니다. 코틀린은 2011년에 처음 발표되었으며, 2016년에 첫 번째 정식 버전(1.0)이 출시되었습니다.

 

주요 특징

 

  1. 모던하고 간결한 문법: 코틀린은 최신 프로그래밍 언어의 트렌드를 반영하여 개발되었으며, 간결하고 직관적인 문법을 제공합니다. 불필요한 보일러플레이트 코드를 줄이고 개발자가 더 적은 코드로 더 많은 작업을 할 수 있도록 합니다.
  2. Java와의 상호운용성: 코틀린은 Java와 100% 상호운용 가능합니다. 즉, 기존 Java 코드를 그대로 사용할 수 있으며, Java 라이브러리 및 프레임워크를 코틀린에서 직접 호출할 수 있습니다.
  3. 안전성: 코틀린은 널 참조(Null Reference) 문제를 컴파일 타임에 해결할 수 있는 기능을 제공합니다. null을 안전하게 처리하기 위한 문법적 지원이 있어 런타임 시 발생할 수 있는 널 참조 예외를 방지합니다.
  4. 타입 추론: 코틀린은 변수의 타입을 명시적으로 지정하지 않아도 자동으로 타입을 추론합니다. 이를 통해 코드의 가독성을 높이고 작성 시간을 단축할 수 있습니다.
  5. 함수형 프로그래밍 지원: 코틀린은 고차 함수, 람다 표현식, 컬렉션 처리와 같은 함수형 프로그래밍 기능을 완벽히 지원합니다. 이러한 기능을 통해 보다 선언적이고 간결한 코드를 작성할 수 있습니다.
  6. 코루틴(Coroutines): 코틀린은 비동기 프로그래밍을 위한 코루틴을 제공합니다. 코루틴을 사용하면 비동기 작업을 마치 동기 작업처럼 간단하고 직관적으로 작성할 수 있습니다.
  7. 멀티플랫폼 개발: 코틀린은 Kotlin/Native를 통해 JVM 외에도 다양한 플랫폼에서 실행될 수 있도록 지원합니다. 이를 통해 안드로이드, iOS, 웹, 데스크탑 등 다양한 환경에서 하나의 언어로 개발이 가능합니다.

 

코틀린 사용 사례

 

  • 안드로이드 개발: 구글은 2017년에 코틀린을 안드로이드 개발의 공식 언어로 채택했습니다. 많은 안드로이드 개발자들이 코틀린을 사용하여 더 안전하고 효율적인 코드를 작성하고 있습니다.
  • 서버 사이드 개발: 코틀린은 스프링 프레임워크와 같은 Java 기반 서버 사이드 프레임워크와도 잘 어울립니다. Kotlin DSL(Domain Specific Language)을 사용하여 더 읽기 쉬운 설정 파일을 작성할 수 있습니다.
  • 데스크탑 애플리케이션: JavaFX와 같은 GUI 툴킷과 함께 사용되어 데스크탑 애플리케이션 개발에도 사용됩니다.
  • 웹 개발: Kotlin/JS를 사용하면 프런트엔드 개발에도 코틀린을 사용할 수 있습니다.

코틀린은 현대적인 프로그래밍 언어로서 다양한 플랫폼에서 안정적이고 효율적인 애플리케이션을 개발할 수 있게 해줍니다. Java와의 완벽한 호환성, 안전한 널 처리, 함수형 프로그래밍 지원 등 다양한 장점을 통해 많은 개발자들 사이에서 인기를 끌고 있습니다.

 


 

자바와 비교

Java와 Kotlin은 모두 JVM에서 실행되는 프로그래밍 언어지만, 여러 측면에서 차이가 있습니다. 아래는 Java와 Kotlin을 비교한 내용입니다.

 

 

1. 문법 및 코드 간결성

 

Java:

  • Java는 비교적 장황한 문법을 가지고 있습니다. 변수 선언, 클래스 정의, getter/setter 등에서 보일러플레이트 코드가 많이 필요합니다.
  • 예를 들어, 간단한 클래스 정의도 많은 줄을 차지할 수 있습니다.
public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
 

Kotlin:

  • Kotlin은 간결한 문법을 제공합니다. 기본적인 데이터 클래스 정의는 단 몇 줄로 가능합니다.
data class Person(var name: String, var age: Int)

 

 

2. Null 안전성

 

Java:

  • Null 참조가 런타임 에러를 일으킬 수 있습니다. 이를 방지하기 위해 별도의 null 체크가 필요합니다.
String name = null;
if (name != null) {
    System.out.println(name.length());
}
 

Kotlin:

  • Kotlin은 null 안전성을 기본으로 제공합니다. 변수에 null이 허용되지 않으며, nullable 타입을 명시적으로 지정해야 합니다.
var name: String? = null
println(name?.length)

 

 

3. 타입 추론

 

Java:

  • Java는 명시적 타입 선언이 필요합니다.
int number = 10;
 

Kotlin:

  • Kotlin은 타입 추론을 지원하여 코드가 더 간결해집니다.
val number = 10
 

 

4. 고차 함수와 람다

 

Java:

  • Java 8부터 람다와 스트림 API를 도입했지만, 여전히 문법이 복잡할 수 있습니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));

 

Kotlin:

  • Kotlin은 함수형 프로그래밍을 자연스럽게 지원합니다.
val names = listOf("Alice", "Bob", "Charlie")
names.forEach { println(it) }
 

 

5. 코루틴

 

Java:

  • Java는 기본적으로 비동기 프로그래밍을 지원하지 않으며, 비동기 작업을 위해 별도의 라이브러리(Futures, CompletableFutures 등)를 사용해야 합니다.

Kotlin:

  • Kotlin은 코루틴을 통해 비동기 프로그래밍을 간단하고 직관적으로 처리할 수 있습니다.
GlobalScope.launch {
    delay(1000L)
    println("Hello")
}
 

 

6. 데이터 클래스

 

Java:

  • Java에서 데이터를 담는 클래스를 만들려면 많은 보일러플레이트 코드가 필요합니다.

Kotlin:

  • Kotlin은 data class를 통해 간단하게 데이터 클래스를 정의할 수 있습니다.
data class User(val name: String, val age: Int)

 

 

7. 확장 함수

 

Java:

  • Java에서는 기존 클래스에 새로운 메서드를 추가할 수 없습니다. 유틸리티 클래스를 만들어야 합니다.

Kotlin:

  • Kotlin은 확장 함수를 통해 기존 클래스에 메서드를 추가할 수 있습니다.
fun String.isEmail(): Boolean {
    return this.contains("@")
}

val email = "example@example.com"
println(email.isEmail())

 

 

8. 장점 요약

 

Java:

  • 오랜 역사와 널리 사용됨.
  • 방대한 라이브러리와 프레임워크.
  • 다양한 도구와 IDE 지원.

Kotlin:

  • 간결하고 현대적인 문법.
  • 안전한 널 처리.
  • 함수형 프로그래밍 지원.
  • 코루틴을 통한 비동기 프로그래밍.
  • 완벽한 Java 상호운용성.

Java는 안정적이고 오랜 기간 동안 사용되어 온 언어로, 많은 레거시 시스템에서 사용됩니다. Kotlin은 Java의 단점을 보완하고 현대적인 개발 스타일을 반영한 언어로, 안드로이드 개발을 포함한 다양한 영역에서 인기를 얻고 있습니다. Kotlin을 사용하면 더 간결하고 안전한 코드를 작성할 수 있으며, Java와의 상호운용성 덕분에 기존 Java 코드를 쉽게 통합할 수 있습니다.