이 글은 코틀린인액션을 읽고 정리한 글입니다.
개요
- 요즘 회사에서 팀 내부적으로 코틀린인액션 책을 읽으며 코틀린 스터디를 하고 있는데 중요한 내용들은 다시 한 번 기억하기 위해 블로그 글로도 정리해보려고 한다.
- 책 코틀린인액션은 Java 경험이 있는 개발자들이 코틀린을 더 쉽게 이해할 수 있도록 코틀린의 특성을 Java와 비교해 설명해주면서 기존 작업 환경에 더 쉽게 코틀린을 도입할 수 있도록 한다.
- 1장에서 다루는 내용 중 코틀린의 주요 특성과 철학에 대해 알아보자.
코틀린의 주요 특성
대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳
- 코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것이다
- 코틀린을 도입하면서 더 적은 코드로 더 편하게 프로그래머의 목표를 달성할 수 있다
- 자바뿐 아니라 자바스크립트로도 코틀린 컴파일이 가능하다 (브라우저, 노드에서 실행 가능)
- 활용 영역 : 서버 상의 코드 (웹 어플리케이션의 백엔드), 안드로이드 모바일 애플리케이션
정적 타입 지정 언어
- 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있다
- 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증한다
- 코틀린 컴파일러가 변수 타입을 자동으로 유추할 수 있기 때문에 모든 변수의 타입을 직접 명시할 필요가 없다 (=
타입 추론
) - 장점
- 성능 : 실행 시점에 어떤 메서드를 호출할지 알아내는 과정이 필요없으므로 메서드 호출이 더 빠름
- 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 오류로 중단될 가능성이 더 적어짐
- 유지 보수성 : 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉬움
- 도구 지원 : 정적 타입 지정을 활용하면 더 안전하게 리팩터링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공
가장 중요한 특성은 코틀린은
nullable
타입을 지원하기 때문에 NPE 발생 여부 확인이 가능하다는 것이다!
코틀린의 철학
실용성
- 코틀린은 연구를 위한 언어가 아니기 때문에, 최신 프로그래밍 언어 설계를 앞서 채택하거나 전산학계에서 연구 중인 혁신적인 아이디어를 코틀린을 통해 탐구하려고 하지 않는다
- 대신, 코틀린은 다른 프로그래밍 언어가 채택한 검증된 해법과 기능에 의존하기 때문에 언어의 복잡도가 줄어들고 언어를 쉽게 배울 수 있다
- 패러다임을 사용할 것을 강제로 요구하지 않는다
- 자바에서 사용해 온 익숙한 프로그래밍 스타일이나 기법을 활용할 수 있다
간결성
- 프로그래머가 작성하는 코드에서 의미 없는 부분을 줄이고, 언어가 요구하는 구조를 만족시킨 언어이다
- getter, setter, 생성자 파라미터를 필드에 대입하기 위한 로직 등 자바에 존재하는 여러 가지 번거로운 준비코드를 묵시적으로 제공한다
- 람다를 지원하기 때문에 작은 코드 블록을 라이브러리 함수에 쉽게 전달할 수 있다
- 코드가 더 간결해지면, 쓰는 데도 시간이 덜 걸리지만, 읽는 데도 시간이 덜 걸린다
안정성
- 프로그래밍 언어가 안전하다는 말은 프로그램에서 발생할 수 있는 오류 중에서 일부 유형의 오류를 프로그램 설계가 원천적으로 방지해준다는 뜻이다
- 안정성과 생산성은 trade-off 관계이다 (안정성을 높이면 생산성이 떨어지고, 생산성을 높이면 안정성이 떨어짐)
- 코틀린을 JVM에서 실행
- 메모리 안정성을 보장하고, 버퍼 오버플로우를 방지하며, 동적으로 할당한 메모리를 잘못 사용함으로 인해 발생할 수 있는 다양한 문제를 예방할 수 있다
- 자바보다 더 적은 비용으로 타입 안정성을 사용할 수 있다 (타입 추론을 제공하며, 컴파일 시점 검사를 통해 실행 시점 오류를 더 많이 방지)
- 코틀린의 타입 시스템은 null이 될 수 없는 값을 추적하며, 실행 시점에 NPE가 발생할 수 있는 연산을 금지한다
- ClassCastException을 방지해준다
- 어떤 객체의 타입을 검사했고 그 객체가 그 타입에 속한다면, 해당 타입의 메서드나 필드 등의 멤버를 별도의 캐스트 없이 사용할 수 있다
- 타입 검사를 생략할 이유가 없고, 검사를 생략해서 생기는 오류가 발생할 일도 없다
상호운용성
- 코틀린은 자바에서 쓰던 기존 라이브러리를 그대로 사용할 수 있다
- 자바 메서드 호출, 상속 인터페이스 구현, 자바 어노테이션을 적용하는 등의 일이 모두 가능하다
- 기존 자바 라이브러리를 가능하면 최대한 활용한다
- 자체 컬렉션 라이브러리를 제공하지 않고, 자바 표준 라이브러리 클래스에 의존한다
- 자바에서 코틀린 API를 호출할 때도 마찬가지로 아무런 변환이 필요없다
- 코틀린이 제공하는 도구도 다중 언어 프로젝트를 완전히 지원하며, 다음과 같은 동작이 가능하다
- 자바와 코틀린 소스 파일을 자유롭게 네비게이션 할 수 있다
- 여러 언어로 이루어진 프로젝트를 디버깅하고 서로 다른 언어로 작성된 코드를 언어와 관계없이 한 단계씩 실행할 수 있다
- 자바 메서드를 리팩터링해도 그 메서드와 관련 있는 코틀린 코드까지 제대로 변경된다. 역으로 코틀린 메서드를 리팩터링해도 자바 코드까지 모두 자동으로 변경된다