Kotlin in action
1부 - Kotlin 소개
1장 - 코틀린이란 무엇이며, 왜 필요한가?
- 핵심 전제는 interoperability 상호운용성 즉, 자바를 사용 중인 곳에서 코틀린도 사용 가능 해야 한다는 것
- 코틀린은 웹 앱의 백엔드, 브라우저나 노드(JS에서 컴파일 가능), 모바일 앱 등 광범위하게 사용 가능
주요 특성
- Statically typed programming language(정적 타입 지정 언어)
프로그램 구성 요소 타입을 컴파일 시점에 알 수 있고 객체의 field나 method를 사용할 때마다 컴파일러가 타입을 검증해준다는 것 - dynamically typed PL(동적 타입 지정 언어)
타입과 관계 없이 모든 값을 변수에 넣을 수 있고 검증이 실행 시점에 일어난다. 장단이 있는데 컴파일 시 오류를 잡아낼 수 없지만 간결함
정적 타입 지정의 장점 : 성능, 신뢰성, 유지보수성, 도구 지원
Type inference(타입 유추)
- 코틀린은 모든 변수의 타입을 직접 명시할 필요는 없음
- 컴파일러가 문맥을 고려해 변수 타입을 결정
함수형 프로그래밍
- first-class function : 함수를 인자, 일반 값처럼 사용할 수 있음
- immutablility - 불변 객체 사용
- no side effect - pure function을 사용하여 객체의 상태를 변경하지 않으므로 부작용이 적음
Benefits of functional programming
- imperative(명령형) code에 비해서 compact
- lambda expression(anonymous function)을 사용하면 인자 그 자체가 함수
- safe multithreading
- 여러 스레드가 같은 데이터를 사용할 때 동기화가 제대로 안되면 문제 발생 -> pure function, immutability 를 이용하여 해결
- test
- pure function 은 테스트가 훨씬 더 쉬움
코틀린의 함수형 프로그래밍 지원
- 함수 타입 지원 -> 함수가 다른 함수를 인자로 받거나 함수를 반환
- 람다 지원
- data class -> value object를 간편하게 생성할 수 있도록 지원
- 객체와 컬렉션에 대한 함수형 스타일 API 제공
- 꼭 함수형 프로그래밍을 강제하는 것이 아님.
명령형 프로그래밍으로 사용하든 조합해서 사용하든 가장 적합하게 코딩하는 방법을 지향
코틀린의 철학
실용성
- 코틀린은 새로운 연구를 위한 언어가 아님
- 여태껏 검증된 방법과 기능을 토대로 더 나은 프로그래밍을 하기 위함
- 코틀린의 특성을 이용해 복잡도를 줄여 간결하게 프로그래밍해서 생산성이 오르길 기대
간결성
- 코드를 작성할 때의 나 != 코드를 읽는 현재의 나 == 처음 코드를 보는 사람
- 짧은 코드 != 간결함
- 내용과 의도를 파악하기 쉬운 코드 = 간결함
- 갈결하기 위해서는 언어적 특성도 필요
- 부수적인 부가 코드(e.g. getter, setter, constructor), 명시적인 코드(e.g. collection 에서 원소 찾기)를 줄일 수 있는 것
- 결국 이런 code writing이 줄어든다는 것은 reading에도 긍정적인 영향
안전성
- JVM을 사용함으로써 이미 memory, buffer overflow, type safe 등을 보장
- NPE(NullPointerException)를 막기 위한 nullable type 지원
val s: String? = null
val s2: String = "domino"
- ClassCastException 방지 지원
if(value is String)
println(value.toUpperCase())
상호운용성
- 자바 라이브러리를 그대로 사용 가능한가? -> YES
- 코틀린의 메소드/클래스를 그대로 호출 가능한가? -> YES
- 자바와 코틀린 간의 API 호출에 변환이 필요한가? -> NO
- 자바 메소드를 리팩토링하면 관련 있는 코틀린 코드까지 리팩토링 가능
Summary
- 타입 추론을 지원하는 정적 타입 지정 언어다. 따라서 소스코드의 정확성과 성능을 보장하면서 간결하게 유지할 수 있다.
- 객체지향과 함수형 프로그래밍 지원. first-class function을 사용해 수준 높은 추상화가 가능하고, 불변 값 지원을 통해 다중 스레드 애플리케이션 개발과 테스트를 더 쉽게 할 수 있다.
- 서버 애플리케이션 개발에 활용 가능. 기존 자바 프레임워크를 완벽하게 지원하고 html이나 persistence의 일반적인 작업을 위한 도구를 제공한다.
- 안드로이드를 지원하고 무료이며 오픈소스이다. 주요 IDE와 빌드 시스템을 지원한다.
- 실용적이며 안전하고 간결하며 상호운용성이 좋다. 읽기 쉽고 간결한 코드를 지원하면서 자바와 제약 없이 통합될 수 있는 데 초점을 맞췄다.
#kotlin