Page 16 -
P. 16
이 책을 진행하면서 코틀린의 안전성을 여러 가지 측면에서 설명할 것이다. 여기서는 몇 가지 중
요한 특징을 짚고 넘어가겠다.
● 타입 추론(type inference)으로 인해 개발자가 명시적으로 타입을 지정하지 않아도 된다(자바
10에도 지역 변수에 대한 타입 추론이 도입됐다).
● 널이 될 수 있는 타입(nullable type)을 통해 null의 사용을 제한할 수 있고, 악명 높은
NullPointerException 예외를 좀 더 쉽게 방지할 수 있다.
● 스마트 캐스트(smart cast)를 통해 타입을 안전하게 변환할 수 있고, 실행 시점에 타입 캐스트
오류를 방지할 수 있다.
1.1.2 다중 패러다임
초기에 코틀린이 다중 패러다임이라는 말의 의미는 자바와 같은 전형적인 주류 프로그래밍 언어
가 지원하는 일반적인 객체지향 패러다임 외에 함수형 프로그래밍을 지원한다는 뜻이었다. 함
수형 프로그래밍은 함수를 다른 값과 마찬가지로 다룬다는 생각에서 비롯된 프로그래밍 방법이
다. 그래서 함수를 다른 함수의 인수로 넘기거나, 지역적으로 함수를 선언하거나, 변수에 저장하
거나, 함수가 함수를 반환하는 등의 일이 가능하다. 함수형 프로그래밍의 또 다른 측면으로 불변
성(immutability)이 있다. 이는 여러분이 만든 객체는 내부 상태를 바꿀 수 없고, 함수는 부수 효과
(side effect)를 만들어낼 수 없다는 말이다.
이런 접근 방법의 큰 이점은 유연성이다. 새로운 유형의 추상화를 만들어낼 수 있어서 훨씬 더 표
현력이 좋고 간결한 코드를 작성할 수 있으며, 이에 따라 생산성이 좋아진다.
Note 함수형 프로그래밍 원칙이 여러 언어에 도입됐음에도 불구하고(예를 들어 자바의 익명 클래스는 람다
(lambda)를 도입하기 위한 좋은 바탕이 될 수 있다), 이런 언어들이 모두 다 함수형 코드를 작성하기에 편리한 문법
적인 도구를 제공하지는 않는다.
반면, 코틀린은 처음부터 필요한 도구를 제공했다. 특히 함수 타입을 부드럽게 조화시킨 타입 시
스템(type system)과 함수 타입의 값을 코드 블록에서 만들어낼 수 있는 람다를 처음부터 제공했다.
표준 라이브러리나 외부 프레임워크도 함수형 프로그래밍 스타일을 장려하는 방대한 API를 제공
한다. 자바도 자바 8부터 함수형 프로그래밍을 지원했으므로, 요즘은 그중 상당수가 자바에도 도
입됐다. 하지만 자바의 표현력은 코틀린의 표현력에 비해 상당히 떨어진다.
28
Kotlin_05.indd 28 2022-02-15 오후 4:07:31