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