Kotlin 프로그래밍을 제대로 사용하기 위해 기초부터 차근차근 공부해보기로 했다. 학습의 기준은 Kotlin in Action 책으로 정하였고, 1장부터 11장까지 천천히 정리해볼 생각이다.
Kotlin?
- Java 플랫폼에서 동작하는 새로운 프로그래밍 언어
- 정적 타입 (
statically typed) 지정 언어 - 함수형 프로그래밍 언어
- 간결성, 실용성, 안정성, 상호운용성을 중시하는 언어
정적 타입 지정 언어
정적 타입 (statically typed) 지정 언어란,
- 구성 요소의 타입을 컴파일 시점에 알 수 있으며, 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해주는 언어
- 동적 타입 (
dynamically typed) 지정 언어와는 달리, 타입과 관계없이 모든 값을 변수에 저장 불가
동적 타입 지정 언어 특징
- 타입과 관계없이 모든 값을 변수에 저장 가능
- 메소드나 필드 접근에 대한 검증이 실행 시점에 수행
- 코드의 간결성과 구조의 유연성 향상
Kotlin 의 정적 타입 지정 언어 차이점
- 코틀린은 자바와 다르게, 모든 변수의 타입을 개발자가 직접 명시하지 않는 타입 추론 (
type inference) 를 지원
var x = 1
// `x` 변수에 따로 타입을 지정하지 않았지만, `1` 이란 값을 저장하면서 타입이 `Int` 로 인식정적 타입 지정 언어의 장점
성능
- 컴파일러를 통해 실행 시점에는 어떤 메소드를 호출할지 찾아내는 과정이 필요 없으므로 메소드 호출 성능 향상
신뢰성
- 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램의 오류를 방지
유지 보수성
- 코드의 타입을 알 수 있기 때문에, 코드의 유지 보수가 보다 수월
도구 지원
- 정적 타입 지정 언어는 더 안전하게 리팩토링 할 수 있도록
IDE의 지원 가능
함수형 프로그래밍
함수형 프로그래밍의 개념
일급 시민 함수 first-class (first-citizen)
- 함수를 일반 객체 또는 값처럼 다를 수 있는 개념
- 함수를 또 다른 함수의 매개 변수로 전달하거나, 반환 가능
불변성 immutability
- 함수안에서의 객체는 절대 바뀌지 않는 불변 객체 상태
부수 효과 side effect 없음
- 항상 같은 출력을 내놓는 함수의 객체 상태가 변경하지 않기 때문에 함수 외부나 환경에 상호작용하지 않는 순수 함수 사용하기에
side effect를 줄일 수 있는 효과
함수형 프로그래밍의 장점
간결성
- 명령형 코드보다 더 간결한 코드
- 함수를 값처럼 활용 가능하기 때문에 코드 중복 방지 가능
안전한 다중 스레드 환경 제공 safe multithreading
- 불변 데이터 구조와 순수 함수를 활용한다면 다중 스레드 환경에서 같은 데이터를 여러 스레드에서 변경 불가
- 복잡한 스레드 동기화 작업 불필요
다중 스레드 환경의 문제점? 여러 스레드가 같은 데이터를 참조하여 변경하는 문제 발생 가능성
테스트 용이성
side effect가 있는 함수는 해당 함수를 검증하기 위한 전체 환경을 구성해야하지만,- 순수 함수는 독립적으로 테스트 완료하면 끝!
Kotlin 의 함수형 프로그래밍의 차이점
Java도 충분히 함수형 프로그래밍이 가능하나, 편하게 사용하기 위해서는 충분한 라이브러리(eg. RxJava) 와 문법 지원이 필요하다.- 하지만,
Kotlin에서는 처음부터 함수형 프로그래밍을 풍부하게 지원하고 있다. - 그러면서도
Kotlin에서는 함수형 프로그래밍을 강제하지 않기 때문에, 변경 가능한 데이터와side-effect를 활용한 프로그래밍이 가능하다.