1. 코틀린을 사용하는 이유
- 코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것이다.
2. 코틀린 활용 영역
- 서버상의 코드 (백엔드) -> Spring에서 Kotlin 공식 사용 지원이 먼저 됨
- 안드로이드 디바이스에서 실행되는 모바일 애플리케이션
- IOS 디바이스에서도 사용 가능 (인텔의 멀티 OS 엔진, KMM 등)
3. 코틀린은 정적 타입 언어이다. (객체지향과 함수형 프로그래밍을 지원)
- 정적 타입 언어 : 컴파일 타임에 타입 검증이 일어난다. 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증한다.
- 타입 추론(Type inference) : 컴파일러가 문맥을 고려해 변수 타입을 결정하는 기능이다.
- 정적 타입 언어 장점 : 성능, 신뢰성, 유지 보수성, 도구 지원
- 성능 : 실행 시점에 어떤 메서드를 호출할지 알아내는 과정이 필요 없어 빠르다.
- 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에, 실행 시 프로그램이 오류로 중단될 가능성이 적어진다.
- 유지 보수성 : 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때 더 쉽다.
- 도구 지원 : 정적 타입 지정을 활용하면 더 안전하게 리팩토링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있다.
- 가장 중요한 특성은 코틀린이 널이 될 수 있는 타입을 지원한다. -> 모든 객체 변수가 NOT Null이다.
(널이 될 수 있는 타입을 지원한다 => 컴파일 시점에 널 포인터 예외 (Null Pointer Exception)가 발생할 수 있는지 여부를 검사)
(Java는 모든 객체 변수를 nullable로 정의, null 안정성 검사는 개발자의 임무가 된다. try-catch로 잡아주지 않으면 NPE 발생)
4. 코틀린은 간결하다.
- 어떤 언어가 간결하다는 말은 그 언어로 작성된 코드를 읽을 때, 의도를 쉽게 파악할 수 있는 구문 구조를 제공한다.
- '람다'를 지원한다 -> 반복되거나 길어질 수 있는 코드를 라이브러리 함수 호출로 대체할 수 있고, 람다를 통해 라이브러리 함수에 쉽게 전달할 수 있다.
- 간결성은 생산성을 향상해 주고, 개발을 더 빠르게 할 수 있게 해 준다.
5. 안전성
- 프로그래밍 언어가 안전하다는 말은 프로그램에서 발생할 수 있는 오류 중에서 일부 유형의 오류를 프로그램 설계가 원칙적으로 방지해 준다는 뜻이다. (물론 절대적인건 아님)
- 언어가 안전하다 -> 오류를 프로그램에서 방지해준다 -> 자바보다 안전한 언어이다 -> 코틀린을 JVM에서 실행하면 메모리 안전성을 보장한다, 자바보다 적은 비용으로 타입 안전성을 사용할 수 있다.
- 코틀린 컴파일러가 타입을 자동적으로 추론해 주기 때문에, 자바보다 더 적은 비용으로 타입 안전성을 사용할 수 있다.
- '?'를 이용하여 어떤 타입이 널이 될 수 있는지 여부를 표시할 수 있다 (?가 있으면 널이 될 수 있음)
- 어떤 객체를 다른 타입으로 캐스트 하기 전에 타입 검사를 해야 하는데 'is'를 통해 검사할 수 있다.
if(a is String)
println(a.toUpperCase())
6. 상호운용성
- 자바 코드에서 코틀린 코드를 호출할 때 아무런 노력이 필요 없다. 그러므로 두 언어를 섞어 쓸 수 있다.
- 기존 자바 라이브러리를 최대한 활용 가능하다. -> 코틀린은 자바 표준 라이브러리 클래스에 의존한다. 다만, 코틀린에서 컬렉션을 더 쉽게 활용할 수 있는 몇 가지 기능을 더할 뿐이다.
- 코틀린은 자바와 소스 파일이 섞여도 제대로 컴파일할 수 있다.
7. 컴파일
- 코틀린 소스코드를 .kt라는 확장자를 파일에 붙임
- 코틀린 컴파일러가 소스코드를 분석
- 소스코드를 분석해서 .class 파일을 만들어낸다.
- 만들어진 .class 파일이 자바 바이트 코드로 변환
- 코틀린 컴파일러로 컴파일한 코드는 코틀린 런타임 라이브러리에 의해 의존
- 코틀린으로 컴파일한 애플리케이션을 배포(배포할 때는 런타임 라이브러리도 함께 배포해야 함, maven, gradle이 애플리케이션을 패키지 할 때 알아서 런타임을 포함시킴)
'Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 리스트 생성 방법 (0) | 2022.03.30 |
---|---|
[Kotlin] 1. 코틀린 기초 (0) | 2022.03.04 |
[Kotlin] invoke 란? (0) | 2022.03.03 |