Kotlin - 01. 코틀린이란 무엇이며, 왜 필요한가?

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 를 활용한 프로그래밍이 가능하다.

출처