반응형
Heli, 헬리
시행착오를 줄이는 방법 - 진태양
Heli, 헬리
  • 분류 전체보기 (82)
    • General (28)
      • Essay (22)
      • Craftsmanship (2)
      • IT Meet & Hack (4)
    • Finance (1)
      • Portfolio (1)
      • Activity (0)
    • Infrastructure (1)
      • Kubernetes (0)
      • AWS (1)
    • Development (45)
      • News (4)
      • Architecture (4)
      • Web (1)
      • Spring Framework (7)
      • JVM (12)
      • MongoDB (0)
      • Git (2)
      • Algorithm (14)
      • Python (1)
    • Computer Science (1)
      • Network (1)
    • Civic Hacking (3)
      • Code for Korea (3)
    • Know-how (2)
      • IT Service (1)
      • Career (1)
    • English (1)
      • Translation (1)

인기 글

  • 서버 개발자, 커뮤니티 빌더의 이야기가 궁금하신분!
    2023.03.28
    서버 개발자, 커뮤니티 빌더의 이야기가 궁금하신분!
  • Why DDD, Clean Architecture and ⋯
    2022.03.10
    Why DDD, Clean Architecture and ⋯
  • [번역] 개발자가 잠자는 동안 돈을버는 5가지 방법 | 사⋯
    2022.04.17
    [번역] 개발자가 잠자는 동안 돈을버는 5가지 방법 | 사⋯
  • M1 칩에서 pyqt5 설치하기 - qmake 패스 설정
    2022.07.30
  • [Java & Kotlin] enum class가 완벽한 ⋯
    2021.12.13
    [Java & Kotlin] enum class가 완벽한 ⋯

블로그 메뉴

  • 홈
  • 관리
  • 방명록
hELLO · Designed By 정상우.
Heli, 헬리

시행착오를 줄이는 방법 - 진태양

코틀린이란 무엇이며, 왜 필요한가?
Development/JVM

코틀린이란 무엇이며, 왜 필요한가?

2022. 2. 13. 11:38
반응형

코틀린의 등장 배경

코틀린은 자바의 대체제로 자주 언급되는데요. 하지만 처음 개발될 당시엔 자바를 대체 하는것이 목표는 아니었습니다.

코틀린의 개발사 Jetbrains에서 개발을 주도하던 드미트리(Dmitry Jemerov)는 코틀린을 개발할 당시 스칼라를 제외한 언어들에는 찾고자 하는 기능이 존재하지 않았고, 스칼라는 컴파일 시간이 매우 느렸기때문에 아쉬움이 있었다고 말했습니다.

결국 코틀린을 통해 원하는 기능을 모두 지원하면서 자바만큼 빠르게 컴파일하는 것이 주요 목적이었던 것입니다.

그러다보니 코틀린은 다수의 유용한 기능을 제공하며, 아직 자바 만큼은 아니지만 빠른 컴파일 타임을 가진 언어로 개발되었습니다.

코틀린의 주요 장점

그럼 코틀린은 어떤 장점을 지니고 있을까요?

1. 간결한 구문

언어의 표현력이 높으면 코드가 간결해집니다. 작성할 코드가 적을수록 최종 애플리케이션에 슬그머니 자리를 잡는 버그가 줄어들고, 최종 코드의 유지 관리가 쉬워집니다.

Jetbrains 에서는 자바 코드 대비, 라인 수를 40% 줄일 수 있다고 합니다.

FAQ | Kotlin

 

FAQ | Kotlin

 

kotlinlang.org

2. null-safety / 널 안전성

이건 개발자들이 가장 좋아하는 코틀린의 기능입니다.

코틀린의 타입 체계는 The Billion Dollar Mistake(10억 달러짜리 실수)라고도 알려진 null 참조가 코드에서 발생할 위험을 제거하는 것을 목적으로 하고 있습니다.

이러한 null-safety 는 코틀린의 컴파일러에서 지원하고 있으므로 null 값을 참조하는 문제가 줄어듭니다.

3. Java 상호 운용성

주요하게 사용되는 플랫폼과의 상호 운용성은 개발 생산성을 크게 높여줍니다.

코틀린을 사용하면 자바로 작성된 모든 프레임워크 및 라이브러리를 활용할 수 있습니다.

또한 모든 자바 코드를 코틀린으로 변환하지 않고도 기존 자바 프로젝트에 코틀린을 점진적으로 도입할 수도 있습니다.

4. Kotlin 코루틴

명령형 프로그래밍 모델을 사용하여 비동기 코드를 쉽게 작성할 수 있는 방법을 제공합니다.

코루틴은 많은 시스템 리소스를 절약하기 때문에 I/O 작업이 많은 고부하 서버측 애플리케이션을 개발하는 데 특히 유용합니다.

코루틴 지원이 Spring Framework에 추가되면서 서버측 개발자가 이 기능을 이용하기가 더 쉬워졌습니다.

 

Going Reactive with Spring, Coroutines and Kotlin Flow

<div class="paragraph"> <p>Since we announced <a href="https://spring.io/blog/2017/01/04/introducing-kotlin-support-in-spring-framework-5-0">Spring Framework official support for Kotlin</a> in January 2017, a lot of things happened. Kotlin was announced as

spring.io

코틀린 맛보기

Java ↔ Kotlin 코드 비교

코틀린 코드를 자바 코드로 디컴파일하여 보여주는 기능을 IntelliJ에서 제공합니다.

Tools → Kotlin → Show Kotlin Bytecode

Kotiln

fun main(args: Array<String>) {
    val a = "10"
    val b = 100
    val sum = a.toInt() + b
    println(sum)
}

data class Person(
    val name: String,
    val age: Int? = null
)

Java

public final class MainKt {
   public static final void main(@NotNull String[] args) {
      Intrinsics.checkNotNullParameter(args, "args");
      String a = "10";
      int b = 100;
      int sum = Integer.parseInt(a) + b;
      boolean var4 = false;
      System.out.println(sum);
   }
}

public final class Person {
   @NotNull
   private final String name;
   @Nullable
   private final Integer age;

   @NotNull
   public final String getName() {
      return this.name;
   }

   @Nullable
   public final Integer getAge() {
      return this.age;
   }

   public Person(@NotNull String name, @Nullable Integer age) {
      Intrinsics.checkNotNullParameter(name, "name");
      super();
      this.name = name;
      this.age = age;
   }

   /* equals, copy, toString... */
}

 

코틀린 지원/실행 환경

코틀린은 기존 JVM과 연동된 기존 생태계 외에도 다양한 실행/프로그래밍 환경을 지원하기 위해 노력하고 있습니다.

  • Kotlin/JVM
    • Server-side app
    • Android app
  • Kotlin/JS
    • Web frontend
  • Kotlin/Native
    • LLVM 컴파일러를 이용하여 특정 OS에서 바로 실행 가능한 머신 코드 생성
  • Android ↔ iOS 크로스 플랫폼 개발 지원
  • Data Science

 

코틀린의 특성

코틀린은 statically / strongly 타입의 언어로 분류됩니다.

또한 각 타입의 특징은 다음과 같습니다.

언어별 타입 정의

절대적인 정의는 아니며, 언어별로 반대 개념의 타입을 지원하는 정도가 다릅니다.

 

Statically typed (정적 타입)

  • 변수의 데이터 타입이 컴파일 타임에 결정됨
  • 최적화에 유리
    • 예) 실행 전 스택 사이즈를 알 수 있는 점 등
  • 관련 버그가 있는 경우 컴파일에 실패함
    • 예) String 타입 변수에 Int 자료형 대입 등

Dynamically typed (동적 타입)

  • 변수의 데이터 타입 체크를 런타임에 진행

Strongly typed (강타입)

  • 다른 데이터 타입간의 변환/연산이 제한적
  • Weakly typed 언어와 비교했을 때
    • 코드를 보기 쉬울 수도 있음
    • 버그가 적을 수도 있음

Weakly typed (약타입)

  • 다른 데이터 타입간의 변환/연산이 유연
    • 관련 키워드 : Implicit Conversion, Type Punning

statically typed 예시

변수 타입을 명시하지 않았으나, 타입 추론(type inference)을 통해 컴파일 타임에 x가 Double type 임을 자동으로 알아냅니다.

val x = 10.0 // -> Double

strong typed 예시

Int형과 Double형의 묵시적/암시적 변환(implicit conversion)이 불가합니다.

val y = (3 == 3.0) // (x) compile error

 

 

코틀린 코드 컴파일

Java 코드와 동일하게 컴파일시 class/jar 파일로 변환됩니다.

Java + Kotlin code

Java 코드와 Kotlin 코드가 혼용된 경우에는 다음과 같은 과정으로 컴파일이 진행됩니다.

  1. Kotlin 코드 컴파일
  2. .class 파일 생성
  3. .class 파일 내부 Java 코드 영역을 javac로 한 번 더 컴파일
  4. jar 파일로 변환
  5. JVM을 이용하여 실행
반응형
저작자표시 비영리 동일조건

    ☕️ Networking

    기술 직군의 기술적인 교류, 커리어 이야기, 직군 무관 네트워킹 모두 환영합니다!

    위클리 아카데미 오픈 채팅방(비밀번호: 9323)

    kakaotalk: https://open.kakao.com/o/gyvuT5Yd

    'Development/JVM' 카테고리의 다른 글
    • 코틀린 기초: 함수 정의와 호출
    • 코틀린 기초: 변수, 함수, 반복문 개요
    • [Kotlin] 상태를 가변적으로 관리했을 때 발생하는 문제
    • Effective Kotlin 수령!!~!!!!
    Kotlin, 코틀린, 코틀린 특징
    Heli, 헬리
    Heli, 헬리
    Java/Kotlin, Spring 백엔드 관련 기술을 익히고 공유합니다.
    코틀린 기초: 변수, 함수, 반복문 개요
    다음 글
    코틀린 기초: 변수, 함수, 반복문 개요
    [Kotlin] 상태를 가변적으로 관리했을 때 발생하는 문제
    이전 글
    [Kotlin] 상태를 가변적으로 관리했을 때 발생하는 문제

    티스토리툴바