Develop/Kotlin

[kotlin] 코틀린이란 무엇인가?

JunJangE 2022. 12. 2. 19:09

💡 코틀린이란?

코틀린은 intellj, pycharm 등 IDE 툴을 만든 젯 브레인(jetbrains)에서 개발한 언어이다. 2011년에 발표되었고, 코틀린섬 이름으로부터 지어졌다. Google I/O 2017에서 안드로이드의 공식 언어로 채택되었다.

코틀린으로는 다음과 같은 것을 할 수 있다.

  • Kotlin/JVM : 자바 가상 머신 상에서 동작하는 앱
  • Kotlin/JS : 자바 스크립트에 의해 DB부터 서버, 클라이언트까지 다루는 풀스택 웹
  • Kotlin/Native : 안드로이드와 iOS뿐만 아니라 임베디드 IOT 등 개발 

즉, 앱과 웹, 서버, 임베디드 등 모든 곳에서 사용할 수 있는 만능 언어이다.

💡 코틀린의 주요 특징

코틀린의 핵심 특성을 좀 더 자세히 알아보자.

정적 타입 지정 언어

코틀린은 정적타입 지정언어이다. 즉, 모든 프로그램의 구성요소를 컴파일 시점에 알 수 있고 컴파일러가 타입을 검증해준다는 것이다.  그래서 자바와 다르게 개발자가 타입을 선언하지 않아도 된다.(타입 추론 지원) 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추할 수 있기 때문에 타입 선언을 생략해도 된다. 결국 개발자가 아니라 컴파일러가 프로그램의 정확성을 검증하기 때문에 프로그램이 오류로 중단될 가능성이 적어진다.

var x = 1 // x를 정수(Int) 값으로 초기화한다.

정적 타입 지정의 장점은 다음과 같다.

  • 성능 : 실행 시점에 어떤 메소드를 호출할지 알아내는 과정이 필요 없으므로 메소드 호출이 더 빠르다.
  • 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 적어진다.
  • 유지 보수성 : 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉽다.
  • 도구 지원 : 정적 타입 지정을 활용하면 더 안전하게 리팩토링 할 수 있고, 도구는 더 정확한 코드 완성 기ㅣ능을 제공할 수 있으며, IDE의 다른 지원 기능도 더 잘 만들 수 있다.

코틀린은 타입 추론을 지원하므로 정적 타입 지정 언어에서 프로그래머가 직접 타입을 선언해야 함에 따라 생기는 불편함이 대부분 사라진다. 그리고 코틀린의 특성 중 가장 중요한 특성은 널이 될 수 있는 타입을 지원한다는 점이다.

Null 안정성

코틀린은 Null이 될 수 있는 타입도 지원한다. Null 값 허용여부를 컴파일 단계에서 검사하기 때문에 Null pointer로 인한 프로그램 중단도 예방할 수 있다. 자바에선 런타임에서 변수에 Null이 입력되서 null pointer exception으로 프로그램이 죽는 경우가 많은데 코틀린은 이걸 런타임에서 잡아준다. 이를 null pointer exception(NPE)에서 자유롭다고 표현한다.

함수형 프로그래밍

코틀린은 함수형 프로그래밍을 지원한다. 거의 모든 프로그램의 행동을 나타내는 코드조각을 순수함수로 나누어 문제를 해결한다. 거의 모든 프로그램의 행동을 나타내는 코드조각을 순수함수로 나누어 문제를 해결한다. 함수를 작성해서 변수에 저장할 수 있고, 다른 함수에 전달할 수 있고, 반환할 수도 있다. 그래서 가독성을 높이고 유지보수를 용이하게 할 뿐만 아니라 함수를 통해 불변 데이터 구조를 사용하기 때문에 다중 스레드를 사용해도 안정적이다.

💡 코틀린을 사용하는 이유

결론적으로 코틀린을 사용하는 이유는 자바와 호환도 잘되면서 실용적으로 간결하면서 안전한 언어이기 때문이다.

자바와 호환성

자바 메서드 호출, 자바 클래스 상속, 인터페이스 구현, 자바 어노테이션 등 자바에서 적용하던 걸 모두 코틀린에서 할 수 있다. 심지어 기존 자바 라이브러리를 활용할 수 있다. 자체 컬렉션 라이브러리가 아니라 자바 표준 라이브러리 클래스에 의존하기 때문이다.

실용성

다른 프로그래밍 언어가 채택해서 이미 성공적으로 검증된 해법과 기능만 담았다. 예를 들어 자바에서 사용해온 익숙한 프로그래밍 스타일을 코틀린에 적용할 수 있다.

간결성

코틀린 코드는 간단하고 간결하다. 예를들어 getter, setter, 생성자 파라미터를 대입 로직 등 자바에선 번거로웠던 코드를 코틀린에서 묵시적으로 제공한다. 그리고 람다 표현식을 지원하기 때문에 작은 코드 블록을 라이브러리를 함수에 쉽게 전달할 수 있다.

안전성

우선 JVM에서 실행하기 때문에 상당한 안정성을 보장할 수 있다. JVM을 사용하면 메모리 안정성을 보장하고, 버퍼오버플로우도 방지하고 동적 메모리 할당으로 인한 문제도 예방할 수 있다. 또한 앞서 말한 특징처럼 정적 타입 지정 언어로 타입 자동 추론을 사용해서 타입 안정성을 보장한다. 그리고 널 타입 지원도 되기 때문 NullPointerException으로 인한 프로그램 오류도 방지해준다.