Tech Log

[Kotlin] 코틀린 언어 특징 본문

Android/Kotlin

[Kotlin] 코틀린 언어 특징

yuhee kim 2022. 6. 27. 23:45

안드로이드 개발 언어로 코틀린을 주로 쓰고 있다. 언어 특징을 대충은 알고 있었지만, 오래 기억하기 위해서 정리해보게 되었다.

 

 

 

 

1. 코틀린이란?

코틀린은 자바 플랫폼(자바 프로그램의 개발과 실행을 위한 환경)에서 돌아가는 프로그래밍 언어다.

자바가 사용 중인 곳이라면 거의 대부분 코틀린을 사용할 수 있다.

현재 서버 개발, 안드로이드 어플리케이션 개발 등에서 활발하게 사용되고 있다.

 

코틀린은 간결하고 실용적이며, 자바 코드와의 상호 운용성을 중시한다.

* 상호 운용성 : 하나의 시스템이 동일 또는 이기종의 다른 시스템과 아무런 제약이 없이 서로 호환되어 사용할 수 있는 성질 (출처 : 위키백과)

 

자바가 실행되는 환경이면 잘 작동하며, 성능도 자바와 같은 수준이다.

 

2. 활용 범위

앞서 코틀린이 자바 플랫폼에서 거의 실행된다고 설명한 것처럼,

코틀린은 자바가 사용되고 있는 모든 곳에 사용되고 있다.

자바 플랫폼에서 자바보다 간결하고 안전하게 사용되는 것이 목적이다.

 

코틀린은 백엔드, 안드로이드 어플리케이션 개발에서 많이 사용된다.

뿐만 아니라, 자바스크립트로도 코틀린을 컴파일할 수 있다고 한다.

따라서 코틀린을 브라우저나 node.js에서 실행할 수 있다.

 

3. 특징

3.1 정적 타입 언어

코틀린은 정적 타입 언어다. 따라서 코틀린으로 작성된 코드의 구성 요소 타입을 컴파일 시점에 알 수 있다.

인스턴스의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다.

 

반면 동적 타입 언어는 타입과 관계없이 모든 값을 변수에 넣을 수 있다.

그리고 메소드나 필드 접근에 대한 검증이 빌드 후(실행 시점)에 일어난다.

그렇기 때문에 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성할 수 있다.

하지만 변수 이름을 잘못입력하는 것과 실수를 실행 시에 알 수 있다.

 

3.2 타입 추론 가능

자바와 달리 코틀린은 타입 선언을 해주지 않아도 된다.

예를 들어, 아래와 같은 코드를 보면 알 수 있다.

var a = 1

코틀린은 위 코드와 같이 var(가변), val(불변)으로 변수를 선언하고 타입 선언은 생략할 수 있다.

이는 코틀린 컴파일러가 문맥에서 변수 타입을 자동으로 유추할 수 있기 때문이다.

 

타입 추론으로 인해 얻을 수 있는 장점은 다음과 같다.

  • 메소드 호출이 더 빠르다. 실행 시점에 어떤 메소드를 호출할지 알아내는 과정이 필요없기 때문이다.
  • 컴파일 시에 프로그램의 정확성을 검증하므로 실행 시에 오류로 중단될 가능성이 적다.

 

3.3 간결성

코틀린은 코드가 더 간단하고 간결할 수 있도록 한다.

코틀린을 만들면서 프로그래머가 작성하는 코드에서 의미가 없는 부분은 줄이려고 했다고 한다.

예를 들어, getter와 setter 같이 생성자 파라미터에 접근하기 위한 로직을 코틀린에서는 작성할 필요 없다.

코틀린에서는 getter와 setter같은 준비 코드를 묵시적으로 제공하므로 작성할 필요 없다.

 

이와 같은 간결성은 코드의 내용을 파악하기 쉽게하고 생산성을 높인다.

 

3.4 안전성

여기서 안전하다는 말은, 프로그램에서 발생하는 오류 중에서 일부 유형의 오류를 설계 단계에서 원천적으로 방지한다는 것이다.

 

3.4.1 JVM 사용

JVM에서 실행함으로써 메모리 안전성을 보장하고 버퍼 오버플로우를 방지할 수 있다.

 

3.4.2 타입 안전성 보장

코틀린은 정적 타입 지정 언어이므로 어플리케이션의 타입 안전성을 보장할 수 있다.

 

3.4.3 널 안정성

코틀린에서는 NullPointerException을 없애기 위해서 노력한다. 코틀린의 타입 시스템은 널(null)이 될 수 없는 값을 추적하며, 실행 시 NulpointerException이 발생할 수 있는 연산 코드를 금지한다.

예를 들어 다음과 같은 코드로 널 안정성을 보장할 수 있다.

val s1 : String ?= null
val s2 : String = ""

변수 s1 ? 키워드를 통해 널이 될 수 있는지 여부를 표시하고 있다.

반면 변수 s2는 ? 키워드가 없으므로 널이 될 수 없다.

 

 

유명한 Kotlin in Action 책에서 공부한 내용을 정리해보았다.

책 내용이 상당해서 읽는데 시간이 오래걸리겠지만, 많은 내용을 습득할 수 있도록 노력해볼 것..

 

 

참조

Kotlin in Action, 드미르티 제메로프 스베트라나 이사코바, 에이콘(2017)

'Android > Kotlin' 카테고리의 다른 글

[Android] Coroutine 개념  (0) 2022.05.11
[Android] View Binding  (0) 2022.04.06
[Android] 안드로이드 액티비티 생명주기  (0) 2022.03.02
Comments