Kotlin
- 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어
- 간결하고 실용적이며, 자바 코드와의 *상호운용성을 중시한다.
- 상호운용성 : 하나의 시스템이 동일 또는 이기종의 다른 시스템과 아무런 제약이 없이 서로 호환되어 사용할 수 있는 성질
- 목적 : 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것
- 자바와 마찬가지로 코틀린도 정적 타입 지정 언어다.
- 널이 될 수 있는 타입을 지원함에 따라 *컴파일 시점에 널 포인터 예외(NullPointerException)가 발생할 수 있는지 여부를 검사할 수 있어서 좀 더 프로그램의 신뢰성을 높일 수 있다.
- 컴파일 시점(Compile Time) : 사람이 읽을 수 있는 형태의 소스 코드를 컴퓨터가 읽을 수 있는 형태의 기계어로 변환해 주는 과정
- 런타임 시점(Run Time) : 컴파일 과정을 마친 프로그램이 실행되고 있는 동안의 시간
- 어떤 객체를 다른 타입으로 캐스트하기 전에 타입을 미리 검사하지 않아 발생할 수 있는 ClassCastException 을 방지해준다. 타입 검사와 캐스트가 is 연산자에 의해 모두 이뤄진다.
- 객체 지향 프로그래밍과 함수형 프로그래밍을 모두 지원하는 다중 패러다임 언어
정적 타입 지정 언어
- 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻
- 자바와 달리 코틀린에서는 모든 변수의 타입을 프로그래머가 직접 명시할 필요가 없다.
- 대부분의 경우 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추할 수 있기 때문에 타입 선언을 생략해도 된다. (타입 추론)
- vs 동적 타입 지정 : 타입과 관계없이 모든 값을 변수에 넣을 수 있고, 메서드나 필드 접근에 대한 검증이 실행 시점에 일어나며, 그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있다.
- 그러나 이름을 잘못 입력하는 등의 실수도 컴파일 시 걸러내지 못하고 실행 시점에 오류가 발생한다.
정적 타입 지정 언어 장점
- 성능 : 실행 시점에 어떤 메서드를 호출할지 알아내는 과정이 필요없으므로 메서드 호출이 더 빠르다.
- 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 작아진다.
- 유지 보수성 : 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉽다.
- 도구 지원 : 정적 타입 지정을 활용하면 더 안전하게 리팩토링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있으며, IDE 의 다른 지원 기능도 더 잘 만들 수 있다.
객체 지향 프로그래밍
함수형 프로그래밍
다중 패러다임
- 초기에 코틀린이 다중 패러다임이라는 말의 의미는 자바와 같은 전형적인 주류 프로그래밍 언어가 지원하는 일반적인 객체지향 패러다임 외에 함수형 프로그래밍을 지원한다는 뜻이었다.
- 코틀린은 함수형 프로그래밍에 필요한 도구를 처음부터 제공했다. 특히 함수 타입을 부드럽게 조화시킨 타입 시스템과 함수 타입의 값을 코드 블록에서 만들어낼 수 있는 람다를 처음부터 제공했다.
- 코틀린 언어가 성장해 나가면서, *두 가지 프로그래밍 패러다임을 더 지원하기 시작했다.
- 두 가지 프로그래밍 패더라임
- 도메인 특화 언어(Domain Specific Language, DSL) : API 를 도메인 특화 언어로 정의할 수 있는 기능 덕분에 코틀린을 선언적인 스타일로 코딩할 수 있다.
- 동시성 프로그래밍(Concurrent Programming) : 코루틴을 도입하면서 코틀린도 동시성 프로그래밍을 지원한다.
- 두 가지 프로그래밍 패더라임
- 이 모든 요소를 한꺼번에 제공하기 때문에 다중 패러다임은 언어의 표현력을 크게 향상시켜, 언어를 더 유연하고 다양한 용도로 사용할 수 있는 도구로 만들어 준다.
'안드로이드 > Kotlin' 카테고리의 다른 글
[Kotlin] 타입 연산자(is, as), 널 처리 연산자 (0) | 2024.12.08 |
---|---|
[Kotlin] 객체 지향 프로그래밍(Object-Oriented Programming) (0) | 2024.12.08 |
[Kotlin] 추상 클래스(abstract class), 인터페이스(interface) (0) | 2024.12.08 |