[Kotlin] Hello, Kotlin !

김상우·2021년 9월 29일
0

[ Kotlin ]

"Java와 100% 호환이 가능한 프로그래밍 언어"


1. Kotlin의 정체성

  • Java랑 100% 호환되면, 그냥 Java를 쓰면 되지 왜 만들었을까?

Kotlin은 JetBrains사에서 공개한 언어이다. 이는 IDE(Integrated Development Environment)를 만드는 회사이기도 하다. 젯브레인의 코드 70%는 Java로 작성되어있다.

그들은 Java를 더 좋고, 모던한, 프로그래밍 언어로 업그레이드 하고 싶었다. 그래서 새로운 언어인 Kotlin을 만들면서 동시에 Java로 짠 시스템을 갈아엎지 않고 계속 관리 할 수 있도록 100 % 호환되도록 한 것이다.

Kotlin은 Java와 유사하지만 더 간결한 문법과 간편하고 다양한 기능이 추가되었다. 심지어, Kotlin은 JavaScript를 개발할 때 사용할 수도 있다.

-> Rough하게 요약하자면, Kotlin은 Java의 상위호환인 셈이다.


  • Kotlin은 구글이 체택한 언어이다.

Kotlin은 오픈소스로 2012년에 릴리즈되고, 2017년 부터 엄청난 인기를 자랑하게 된다. 왜냐면 구글이 안드로이드 앱을 만들기 좋은 공식 언어로 코틀린을 추천했기 때문이다.


  • Kotlin의 이름은 러시아의 코틀린섬에서 유래했다.
    Java의 이름이 인도네이사의 자바 섬에서 유래한 것과 비슷하다.


2. 자바와 100% 호환 가능한 이유

  • 호환가능하다(compatible) 의미

어떤 프로젝트 안에서 Kotlin 파일과 Java 파일이 바로 옆에 붙어있다고 생각해보자. Kotlin파일에서 Java의 코드를 불러올 수 있고, 반대로 Java 파일에서 Kotlin의 코드를 불러와 사용할 수 있다는 의미이다.

Android Studio에서 실제로 Java로 쓰여진 코드를 Kotlin으로, Kotlin으로 쓰여진 코드를 Java로 변경해주는 기능도 있다.


  • 어떻게 가능할까?

이 모든 것은 Java Virtual Machine (JVM)에서 시작된다.
먼저, Compilation 과 Interpretation을 이해해야한다.

예를 들자면,
1. Compilation은 C 언어 프로그램을 기계어로 컴파일 하는 것이다.
2. Interpretation은 Python을 컴파일 하지 않고 그냥 프로그램을 실행하면 거기에 interpreter가 있어서 real-time으로 기계어로 전달되는 것이다.

Compilation은 항상 Interpretation보다 빠르다. 그러나 Compilation은 플랫폼에 의존적이다.

만약에 내가 window, Linux, Mac으로 컴파일 하려고 하면, 각각 다르게 작업을 해야한다. 각 OS가 각기 다른 기계어를 지니고 있기 때문이다.

반대로 Interpretation은 플랫폼에 독립적이다.
나의 Python 코드를 한 번만 작성하면 나머지는 interperter가 알아서 window, Linux, Mac으로 변환한다.

JVM은 바로 이러한 Compilation은 그리고 Interpretation의 조합이다.
자바 혹은 코틀린 코드를 쓸때, 이를 기계어로 컴파일 하는 것이 아니라.
java bytecode라는 것으로 컴파일된다. 이 부분이 compilation이다.

그리곤 이 java bytecode라는 것을 window, Linux, Mac으로 실행시키려면 여기서 JVM 이 필요하게 된다. JVM은 java bytecode를 이해하고, 이를 window, Linux, Mac 등 으로 번역한다. 이것이 interpretation.

덕분에 코틀린은 자바와 100% 호환이 가능한 것이다. 왜냐하면 코틀린이 결국 java byte code로 컴파일 되기 때문이다.


3. 코틀린 활용법 & 장점

출처 : https://gun0912.tistory.com/81
https://readystory.tistory.com/85
https://devvkkid.tistory.com/164

[ Kotlin의 대표적인 3가지 장점 ]

1. 코틀린은 null safe이다.

이는 자바 개발자로서는 엄청난 안도감을 준다.
null safe를 이해하기 위해, 먼저 data class를 이해하고 넘어가겠다.
코틀린에는 data class 라는 매우 편리한 키워드가 존재한다.

다음은 Person 이라는 데이터 클래스를 생성하는 코드이다.

  • Java로 구현한 Person 데이터 클래스
public class Person {
    String name;
    int age;
    String gender;
    
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    
    // getter & setter 를 밑에 더 구현해야 함
}

  • Kotlin으로 구현한 Person 데이터 클래스
data class Person(var name: String, var age: Int, var gender: String)

-> java에선 여러 줄 작성해야하는 코드가, kotlin에선 단 한 줄로 끝낼 수 있다. 생성자의 기능도 포함되어 있으며, getter & setter도 포함되어있다.

데이터 클래스에 대한 이해를 바탕으로 null safe를 다시 살펴보자.
다음은 Kotlin이 null이 될 가능성이 있는 데이터를 어떻게 처리하는지 보여준다. null 가능성이 있을 땐 " ?: " 라는 엘비스 연산자를 사용한다.

// 데이터 클래스
data class Person(
    val name: String,
    val age: Int? = null // 널이 될 수 있는 타입과 파라미터 디폴트 값
)

// 최상위 함수
fun main(args: Array<String>) {
    val persons = listOf(
        Person("Alice"),
        Person("Bob", age = 29) // 이름 붙은 파라미터
    )

    val oldest = persons.maxByOrNull  { it.age ?:0 } // 람다 식과 엘비스 연산자
    println("The oldest is: $oldest") // 문자열 템플릿
}

결과 -> "The oldest is: Person(name=Bob, age=29)"
null을 처리해줄 수 있는 키워드가 있으며, null 관련 error가 생길 시, 컴파일 시점에 오류가 발생하기 때문에 개발자 입장에서 편하다.

2. coroutine

(코루틴을 알기 쉽게 표현한 GIF)

Go 언어의 go routine이랑 굉장히 비슷하다. 참고로 Go루틴(goroutine)은 Go 런타임이 관리하는 Lightweight 논리적 (혹은 가상적) 쓰레드이다. 자세히 알기 위해선 내용이 매우 길어진다.

간단히만 말하면,
Context Switching 오버헤드가 적은 Non-blocking 일종의 경량 스레드이다. (스레드는 아니다.)

3. 객제치향 프로그래밍이자 함수형 프로그래밍

  • 일명 하이브리드형 언어라고 한다.

객체지향과 함수형 프로그래밍은 개발상식 게시물에 자세히 설명해놓았다.

  • new 키워드를 사용할 필요가 없다 = 개꿀이다.
  • 함수를 다른 함수의 매개변수로 사용할 수 있다.
  • 동시성이 좀 더 안전해지며 자연스러워진다.

코틀린 활용법

1. java 어플리케이션에서 활용할 수 있다.

예를 들면 Spring Boot를 코틀린 프레임워크와 함께 사용해도 아무 문제가 없을 것이고, 코틀린으로 안드로이드 애플리케이션을 개발할 수 있다.

2. 코틀린은 자바스크립트로도 컴파일이 가능하다.

코틀린으로 작성한 다음 js로 컴파일해서 리액트 js로 갖고 놀수도 있고,
코틀린으로 작성한 다음 js로 컴파일해서 Node.js로 가져갈수도 있다.

3. 데이터 사이언스도 들여다볼 수 있다.

코틀린을 활용한 데이터 시각화, 데이터 사이언스 사례가 나오고 있다.

프로그래밍 언어가 이렇게 다양한 목적을 수행할 수 있게 되면 (파이썬처럼), 해당 언어 커뮤니티가 폭발적으로 성장한다. 실제로 코틀린이 그렇게 되고있다.

안드로이드 앱, 백엔드, 프론트엔드, 데이터 사이언스 다 쌉 가능한 코틀린..
Java 개발자 시장에서 코틀린 스택은 좋은 경쟁력이 될 것이다.


전체 아이디어 출처 : Nomad coder님 유튜브
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.

0개의 댓글