Kotlin In Action
기타 온라인 자료
1. 공식 코틀린 포럼
https://discuss.kotlinlang.org
2. slack 채팅
(http://kotlinslackin.herohuapp.com 에서 초대를 받을 수 있음)
3. stack overflow의 코틀린 태그
http://stackoverflow.com/questions/tagged/kotlin
4. kotlin reddit
http://www.reddit.com/r/Kotlin
5. 페이스북 한국 코틀린 사용자 그룹
www.facebook.com/groups/kotlinkr/
6. 한국 코틀린 사용자 슬랙 채팅
(https://kotlinkr.herokuapp.com/ 에서 초대를 받을 수 있음)
Part 1 코틀린 소개
1장. 코틀린이란 무엇이며, 왜 필요한가?
- 코틀린은 간결하고 실용적이며, 자바 코드와의 상호운용성(interoperability)을 중시
- 코틀린은 기존 자바 라이브러리나 프레임워크와 함께 잘 작동
- 성능도 자바와 같은 수준
1.2 코틀린의 주요 특성
1.2.1 대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳
- 코틀린의 주 목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전성 높은 대체 언어를 제공하는 것
1) 코틀린을 활용할 수 있는 일반적인 영역
- 서버상의 코드(특히 웹 애플리케이션의 백엔드)
- 안드로이드 애플리케이션
1.2.2 정적 타입 지정 언어(statically typed)
1) 정적 타입 지정 의미
- 타입을 컴파일 시점에 알 수 있음
- 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해준다는 의미
- 코틀린은 문맥을 고려해 변수 타입을 결정하는 타입 추론(type inference) 기능을 지원
ps. 동적 타입은 당연히 런타임에 타입을 알 수 있음
2) 정적 타입 지정의 장점
- 속도가 빠르다.
- 안정성
3) 정적 타입에서 자바와 다른 코틀린의 특징
(1) nullable type을 지원
- 컴파일 타입에 null pointer exception 발생 여부에 대해 검사할 수 있음
(2) function type 지원
- 함수형 프로그래밍 특징 지원
1.2.3 함수형 프로그래밍과 객체지향 프로그래밍
1) 함수형 프로그래밍의 핵심 개념
(1) 일급 시민인(first-class) 함수
- 함수를 변수에 저장 가능
- 함수를 parameter로 다른 함수에 전달 가능
- 함수에서 새로운 함수를 만들어서 반환 가능
(2) 불변성(immutability)
- 함수형 프로그래밍에서는 만들어 진 후에는 내부 상태가 변하지 않는 불변 객체를 사용해 프로그램을 작성
(3) 순수 함수 사용(pure function)
- side effect 없음
- 같은 입력에 항상 같은 출력을 리턴한다.
- 다른 객체의 상태를 변경하지 않는다.
2) 함수형 스타일로 프로그램을 작성할 시 장점
(1) 간결성
- 더 강력한 추상화로 코드 중복 방지
(2) 다중 스레드 환경에서 안전(thread safety)
- 불변 데이터 구조를 사용한다면, 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경할 수 없다.
(3) 테스트 쉬움
- 순수 함수이므로 각 함수가 독립적이다.
3) 함수형 vs 객체지향
- 코틀린은 함수형 프로그래밍 스타일을 강제하지 않는다.
- 즉, 객체지향과 함수형 접근 방법을 함께 조합해서 문제에 가장 적합한 도구를 사용
1.2.3 무료 오픈소스
1.3 코틀린 응용
1.3.1 코틀린 서버 프로그래밍
- 자바와 상호운용할 수 있다는 점이 가장 큰 장점
1) 서버 프로그래밍 분야
(1) 브라우저에 HTML 페이지를 돌려주는 웹 애플리케이션
(2) HTTP를 통해 JSON API를 제공하는 백엔드
(3) RPC(원격 프로시저 호출) 프로토콜을 통해 서로 통신하는 작은 서비스들로 이루어진 마이크로서비스
1.3.2 코틀린 안드로이드 프로그래밍
1.4 코틀린의 철학
- 코틀린은 자바와의 상호운용성에 초점을 맞춘 실용적이고 간결하며 안전한 언어
1.4.1 실용성
- 코틀린은 실제 문제를 해결하기 위해 만들어진 실용적인 언어
- 코틀린 설계는 대규모 시스템도 운용할 수 있게 설계됨
- 코틀린 설계는 사용자 편의성도 많이 고려
- 코틀린은 연구를 위한 언어가 아님
- 코틀린은 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존
- 특정 코드 스타일이나 패러다임을 사용할 것에 의존하지 않음(POJO)
- 도구(IDE 등)의 활용을 염두에 두고 설계
1.4.2 간결성
- 코드가 간결하면 코드 내용 파악 쉬움
- 코드에서 의미없는 부분을 줄임
- 코드를 쓰거나 읽는데 시간을 절약할 수 있음(생산성 향상)
1.4.3 안전성
: 일반적으로 프로그래밍 언어가 안전하다는 말은 프로그램에서 발생할 수 있는 오류 중에서 일부 유형의 오류를 프로그램 설계가 원칙적으로 방지해준다는 뜻
- 안전성과 생산성 사이에는 트레이드오프(trade off) 관계가 성립
- 코틀린은 자바보다 더 높은 수준의 안전성을 제공하고 전체 비용은 더 적게 지불
1) 코틀린이 제공하는 대표적인 안전성의 예
(1) NullPointerException
- 이 에러를 컴파일 타임에 검사
(2) ClassCastException
- 어떤 객체의 타입을 변경할 때, 코틀린에서는 타입 검사와 캐스트를 한 연산자에 의해 이뤄진다.
1.4.4 상호운용성
1) 코틀린은 자바가 사용하는 기존 라이브러리를 그대로 사용할 수 있다.
(1) 자바 메서드를 호출 가능
(2) 자바 클래스 상속 가능
(3) 자바 인터페이스 구현 가능
(4) 자바 애노테이션을 코틀린 코드에 적용 가능 등
2) 자바 코드에서 코틀린 코드를 호출 가능
3) 코틀린은 자체 컬렉션 라이브러리를 제공하지 않음
(1) 코틀린은 자바 표준 라이브러리 클래스에 의존
- 즉, 코틀린에서 컬렉션을 더 쉽게 활용할 수 있게 몇 가지 기능을 제공
1.5 코틀린 도구 사용
1.5.6 자바-코틀린 변환기
- 자바 파일을 코틀린 파일로 변환
1) intelliJ 변환기
- 코드(Code) > 자바 파일을 코틀린 파일로 변환(Convert Java File To Kotlin File)