코틀린(Kotlin)에 대해서 알아보자

김현수·2024년 7월 3일
1
post-thumbnail

개요

학교에서 모바일프로그래밍 수업을 들으면서 코틀린의 존재 정도는 알고 있었다. 그러다가 요즘 자바를 사용하는 서버상의 코드(특히 백엔드), 안드로이드 기반에 모바일 어플리케이션과 같은 영역은 현업에서 대부분 코틀린으로 넘어갔다는 말을 듣고 관심이 가 더 알아보고자 한다.

코틀린(Kotlin)이란?

코틀린은 2011년 7월 IntelliJ, PyCharm 등을 만든 JetBrains 사에서 개발한 JVM에서 동작하는 프로그래밍 언어다. JVM 기반 언어이기에 2017년에 구글에서 코틀린을 안드로이드 공식 언어로 지정하고 2021년 부터 신규 앱 개발시 코틀린으로 개발할 것을 권장하는 등 점점 자바를 대체해가는 추세이다.

Q: 왜 구글은 코틀린을 안드로이드 공식 언어로 지정했을까?

Java는 제임스 고슬링이라는 사람으로 부터 만들어진 언어이다. 하지만 고슬링이 회사를 떠나면서 썬 마이크로시스템즈를 인수한 오라클이 Java를 관리하게 되었다.

그 후 오라클은 Java JDK 유료화 정책을 펼치게 되는데 여기서 구글과 충돌이 일어나게 된다. 구글은 이전에 Java JDK를 사용하여 안드로이드의 핵심 프레임워크와 서비스들을 개발한 상태였기에 오라클은 구글을 상대로 어마무시한 금액을 요청했다.

이에 구글은 오라클과의 분쟁을 피하고 앞으로 서술할 여러 장점들을 가지고 있는 코틀린을 Java 언어를 대체하기 위한 공식 언어로 채택하였다.

특징

정적 타입 지정 언어

코틀린은 자바와 마찬가지로 정적 타입 지정 언어이다. 정적 타입 지정 언어란 모든 프로그램 구성요소의 타입을 컴파일 시점에 알 수 있고 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해 주는 언어를 의미이다.

이에 반대되는 동적 타입 지정 언어(Groovy, JRuby)는 타입과 관계없이 모든 값을 변수에 넣을 수 있고 메소드나 필드 접근에 대한 검증이 실행 시점에 일어나는 언어를 의미한다. 이에 따라 코드가 간결해지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있지만 컴파일 시점이 아닌 실행 시점에 오류가 확인되는 단점이 있다.

코틀린은 자바와 같이 정적 타입 지정언어이지만 자바와 달리 변수 타입을 자동으로 유추(타입 추론)이 가능하기에 타입 선언을 생략해도 된다.

var n = 1 // n을 자동으로 정수로 초기화

또한 null이 될 수 있는 타입을 지원하여 컴파일 시점에 널 포인트 익셉션이 발생할 수 있는지 여부를 검사할 수 있다.

var a: String? = null
var b: String? = "hello"
b = null // 다 가능

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

  • 성능 : 실행 시점에 어떤 메소드를 호출할지 알아내는 과정이 없기에 메소드 호출이 더 빠르다.
  • 신뢰성: 컴파일러가 타입을 검증해주기 때문에 프로그램이 오류로 중단될 가능성이 적어진다.
  • 유지 보수성: 코드에서 다루는 객체가 무슨 타입인지 알 수 있기에 처음보는 코드를 다룰 때 더 쉽게 이해할 수 있다.
  • 도구 지원: 더 안전하게 리펙토링이 가능하고 도구와 IDE는 더 정확한 지원 기능을 제공할 수 있다.

함수형 프로그래밍

함수형 프로그래밍은 일급 객체인 함수, 불변성, side effect 없음 세가지 개념으로 이해할 수 있다.

  • 일급 객체(first-class)인 함수
    함수를 일반 값처럼 다룰 수 있다는 뜻이다. 함수를 변수에 저장하고 인자로 다른 함수에 전달할 수 있으며 함수에서 새로운 함수를 반환할 수 있다.

  • 불변성 (immutability)
    만들어 지면 내부 상태가 절대 바뀌지 않는 불변 객체를 사용하여 프로그램을 사용한다.

  • side effect 없음
    입력이 같으면 항상 같은 출력을 내놓고 다른 객체 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용한다. (함수 외부 변수나 환경과 상호작용하지 않는다는 뜻)

이를 통해 가지는 장점은 다음과 같다.

  • 간결성
    함수형 코드와 상응하는 명령형 코드에 비해 간결하다. 함수를 값처럼 활용하여 더 강력한 추상화가 가능하고 이를 통해 코드 중복을 막을 수 있다.

  • Thread Safe
    멀티쓰레드를 안전하게 사용할 수 있다. 동기화 없이 같은 데이터를 여러스레드가 변경하는 Critical Section 문제를 불변성이라는 특징을 통하여 해결할 수 있다.

  • 테스트 용이
    side effect가 없기 때문에 그 함수를 독립적으로 테스트 할 수 있다.

무료 오픈소스

코틀린 언어와 컴파일러, 라이브러리 및 코틀린과 관련된 모든 도구는 무료 오픈소스이기에 언제나 무료로 사용할 수 있다.

코틀린의 철학 (코틀린을 사용하는 이유)

실용성

  • 코틀린은 다른 언어들이 채책한 해법과 기능에 의존한다. 이로 인해 언어의 복잡도가 낮고 이미 알고 있는 기존 개념을 통해 코틀린을 사용할 수 있다.
  • 어느 특정 프로그래밍 스타일과 패러다임을 강요하지 않는다.
  • IDE와 같은 도구 사용을 강조한다.

간결성

  • getter, setter 와 같은 준비코드를 코틀린은 묵시적으로 제공하여 더 코드를 간결하게 해준다.
  • 다양한 기능이 있는 표준 라이브러리를 제공하여 코드가 길어지거나 반복되는 것을 라이브러리 함수로 대체할 수 있다.
  • 이를 통해 코드를 더 간단하고 간결하게 해준다.

안전성

  • JVM 기반이기에 메모리 안전성을 보장하고 buffer overflow를 방지해주며 동적할당 메모리를 잘못 사용하여 발생할 수 있는 문제를 에방해준다.
  • 정적 타입 지정 언어이기에 타입 안정성을 보장한다.
  • 컴파일 시점에서 검사를 하여 Null 오류를 방지한다.
  • 타입검사와 캐스트가 한 연산자에 의해 이뤄지기에 ClassCastException을 방지한다.

상호운용성

  • 자바의 기존 라이브러리들을 그대로 사용할 수 있다. 자바 코드에서 코틀린 코드를 호출할 때도 아무런 노력이 필요 없다.
  • 자바 표준 라이브러리에 의존하여 컬렉션을 사용한다. 더군다나 더 쉽게 사용할 수 있는 기능도 있다.
  • 다중 언어 프로젝트를 지원한다. 코틀린과 자바가 섞여있어도 컴파일이 가능하다.

참고자료

https://velog.io/@dbsdlswp/Kotlin%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%9C%EA%B0%80

https://incheol-jung.gitbook.io/docs/study/kotlin-in-action/1

0개의 댓글