Kotlin In Action 1장 코틀린이란 무엇이며, 왜 필요한가?
Kotlin
자바와의 상호운용성에 초점을 맞춘 실용적이고 간결하며 안전한 언어
> 실용성, 간결성, 안전성, 상호운용성
> 코틀린을 설계하면서 일반적인 작업에 대해 이미 잘 알려진 해법을 채택
NullPointerException과 같이 흔히 발생하는 오류 방지하고, 읽기 쉽고 간결한 코드를 지원하면서 자바와 아무런 제약 없이 통합될 수 있는 언어를 만드는데 초점
Kotlin vs JAVA
- 코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것
- 자바 코드와의 상호운용성을 중시하여 자바 라이브러리나 프레임워크도 호환
- 따라서 자바가 사용되는 곳(대표적으로 서버, 안드로이드)이라면 대부분 대체 가능
Kotlin License
- 코틀린 언어와 컴파일러, 라이브러리 및 코틀린과 관련된 모든 도구는 모두 오픈소스(목적에 관계 없이 무료 이용가능)
- Apache 2 라이선스
https://github.com/jetbrains/kotlin
정적타입 지정 언어
모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입 검증
소스 코드의 정확성과 성능을 보장하면서도 소스 코드 간결하게 유지 가능
장점)
- 성능: 실행 시점에 어떤 메서드를 호출하는 과정이 필요 없으므로 메서드 호출이 더 빠름
- 신뢰성: 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램 오류 중단성 감소
- 유지 보수성: 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 가독성 증가
- 도구 지원: 도구가 더 정확한 코드 완성 기능을 제공할 수 있으므로 더 안전하게 리팩토링 가능
코틀린 특징)
1. 타입 추론 지원
직접 명시하지 않아도 컴파일러가 문맥으로부터 변수 타입 자동 유추
2. 널 타입 지원
컴파일 시점에 널 포인터 예외 발생 여부 검사 가능
* 동적 타입 지정 언어
타입과 관계 없이 모든 값을 변수에 넣을 수 있고 실행 시점에 메서드나 필드 접근 검증
함수형 프로그래밍
특징)
1. first-class 함수
함수를 일반 value처럼 다룰 수 있음 (변수 저장, 파라미터로 전달 등)
2. 불변성
일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성
3. 부수 효과(side effect)없음
입력이 같으면 항상 같은 출력
다른 객체의 상태를 변경하지 않으며 함수 외부와 상호작용하지 않는 순수 함수 사용
장점)
- 간결성: 추상화를 통해 코드 중복 제거
- 다중 스레드 사용시 안전: 불변 데이터 구조와 순수 함수를 사용하면 다중 스레스 환경에서 같은 데이터를 여러 스레드가 변경 할 수 없으므로 복잡한 동기화를 적용하지 않아도 된다.
- 프로그램 테스트 용이: 부수 효과가 있는 함수는 그 함수를 실행할 때 필요한 전체 환경을 구성하는 준비 코드가 따로 필요하지만, 순수 함수는 독립적으로 테스트 가능
> 코틀린의 함수형 프로그래밍 지원
- 어떤 함수가 다른 함수를 파라미터로 받거나 함수가 새로운 함수 반환 가능
- 람다 식을 지원함에 따라 번거로운 준비 코드를 작성하지 않아도 코드 블록을 쉽게 정의하고 여기저기 전달 가능
- 데이터 클래스는 불변적인 값 객체를 간편하게 만들 수 있는 구문 제공
- 코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API 제공
> 코틀린은 객체지향과 함수형 프로그래밍 스타일을 모두 지원하므로
first-calss 함수를 사용해 수준 높은 추상화가 가능하고, 불변 값 지원을 통해 다중 스레드 애플리케이션 개발과 테스트 용이
코틀린 코드 컴파일
순서)
1. 코틀린 소스코드 저장 시 보통 .kt 확장자 사용
2. 코틀린 컴파일러가 .kt 소스 코드 분석 후 .class 파일 생성
3. .class 파일을 애플리케이션 유형에 맞는 표준 패키징 과정을 거쳐 실행
특징)
- 코틀린 컴파일러로 컴파일한 코드는 코틀린 런타임 라이브러리에 의존
런타임 라이브러리에는 코틀린 자체 표준 라이브러리 클래스와 코틀링네서 자바 API 내용을 확장한 내용
따라서 코틀린으로 컴파일한 애플리케이션을 배포할 때는 런타임 라이브러리도 함께 배포해야함
코틀린 응용
[서버 프로그래밍]
코틀린은 기존 자바 프레임워크를 완벽하게 지원하는 한편, HTML 생성기가 영속화 등의 일반적인 작업을 위한 새로운 도구 제공
[안드로이드 프로그래밍]
코틀린 런타임 라이브러리는 크기가 작고, 코틀린 컴파일러는 안드로이드 API 특별 지원
코틀린의 다양한 라이브러리는 안드로이드에서 흔히 하는 작업에 사용할 수 있으면서 코틀린과 잘 통합될 수 있는 함수 제공