Chapter 1
1.1 코틀린 맛보기
data class Person(val name: String, val age: Int? = null)
fun main(args: Array<String>) {
val persons = listOf(Person("영희"), Persion("철수", age = 29))
val oldest = persons.maxBy { it.age ?: 0 }
println("나이가 가장 많은 사람: $oldest")
}
- class의 setter, getter는 자동으로 생성
- class의 매개변수 이름은 앞에, 타입은 뒤에 작성된다. ex) val name: String
- 엘비스 연산자
?:
=age ?: 0
을 예로 age가 null이면 0을 반환, null이 아니면 age를 반환한다. 자바의 Optional과 비슷 val oldest = persons.maxBy { it.age ?: 0 }
에서it
은 예약어로 람다식에서 하나의 item을it
으로 받을 수 있다
1.2 코틀린의 주요 특성
1.2.2 정적 타입 지정언어
- 코틀린은 자바와 마찬가지로
정적 타입
지정 언어이다. 정적 타입 지정이라는 말은 모든 타입에 대해 컴파일 시점에 알 수 있고, 컴파일러가 타입 검증을 해준다는 의미 - 코틀린은
자동 타입 추론을 지원
한다. 아래 코드는 코틀린이x
를 자동으로정수
타입으로 초기화 하는 예.
var x = 1
1.2.3 함수형 프로그래밍과 객체지향 프로그래밍
- 함수형 프로그래밍의 핵심 개념
- 일급 시민(First-class)인 함수
- 불변성(immutability)
- 부수 효과(side-effect) 없음
- 함수형 코드는 명령형(imperative)코드에 비해 간결하다
- 함수를 값처럼 활용할 수 있으며 더 강력한 추상화를 통해 코드 중복을 막을 수 있다
- Multi-Threading에서 안전하다
- 코틀린의 함수프로그래밍 지원
- 어떤 함수가 다른 함수를 파라미터로 받거나, 함수가 새로운 함수를 반환할 수 있다
- 람다 식을 지원하기 때문에 코드 블럭을 쉽게 정의 하고 여기저기에 전달 할 수 있다
- 데이터 클래스를 통해 불변적인
값 객체(Value Object)
를 간편하게 만들 수 있다 - 코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API를 제공한다
1.4 코틀린의 철학
1.4.1 실용성
코틀린은 연구를 위한 언어가 아닌 대규모 시스템을 개발해본 다년간의 경험을 바탕으로 만들어진 언어이다.
1.4.2 간결성
Boiler-Plate 코드를 최대한 만들지 않도록 지원하여 코드의 내용을 파악하기 쉽게 한다.
1.4.3 안전성
자바의 JVM에서 지원하는 수준의 안전성보다 더 높은 수준의 안전성을 제공한다. 컴파일 시점에 NPE를 발생하는 코드를 검사한다. 또한 ClassCastException
같은 경우는 Smart Cast
를 통해 미연에 방지해 준다.
1.4.4 상호운용성(Interoperability)
기존 자바의 모든 라이브러리를 수정 없이 그대로 사용 할 수 있다. 또한 권장하는 것은 아니나 기술적으로 코틀린 코드와 자바 코드를 섞어서 사용해도 정상적으로 컴파일을 지원한다.
1.6 요약
- 코틀린은 타입 추론을 지원하는
정적 타입 지정 언어
다. - 객체지향과 함수형 프로그래밍 스타일을 모두 지원한다.
- 서버 애플리케이션 개발에 활용할 수 있다.
- 안드로이드에도 활용할 수 있다.
- 무료이며 오픈소스이다.
- 실용적이며 안전하고, 간결하며 상호운영성이 좋다.