1.1 코틀린 맛보기
data class Person(val name: String, val age: Int? = null)
fun main() {
val persons = listOf(Person("영희")
, Person("철수", age=29))
val oldest = persons.maxOf { i -> i.age ?: 0}
println("나이가 가장 많은 사람 : $oldest")
}
1.2 코틀린의 주요 특성
1.2.1 대상 플랫폼
서버, 안드로이드 등 자바가 실행되는 모든 곳에서 사용
1.2.2 정적 타입 지정
- 코틀린은 타입추론 (Type inference)가 가능 → 모든 변수의 타입을 프로그래머가 직접 명시할 필요 없음
- 자바와 마찬가지로 코틀린도 정작 타입 지정 언어
- 정적 타입 지정이란 ?
- 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고, 프로그램 안에서 객체의 필드나 메소드를 사용할 때 마다 컴파일러가 타입을 검증해준다.
- 정적 타입 지정의 장점
- 성능 : 성능 시점에 어떤 메소드 호출할 지 알아내는 과정이 필요 없어서 메소드 호출이 빠르다.
- 신뢰성 : 컴파일러가 프로그램 정확성 검증하기 때문에 프로그램 오류 중단 가능성이 적어짐
- 유지보수성
- 도구 지원 : 더 안전하게 리팩토링이 가능함
1.2.3 함수형 프로그래밍과 객체지향 프로그래밍
일급시민 함수 (First Class 함수)
함수를 일반 값처럼 다룰 수 있다. 함수를 변수에 저장, 함수를 아규먼트로 다른 함수에 전달 가능, 새로운 함수 만들어서 반환 가능
불변성
immutable 객체를 사용해서 프로그램 작성
Side Effect 없음
입력이 같으면 항상 같은 출력을 반환
다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수한 함수 사용
함수형 프로그래밍의 장점
- 간결성 : 명령형 코드에 비해 더 간결하고 우아하다.
- 다중스레드를 사용해도 안전하다. (thread-safe 하다)
- 함수형 프로그램은 테스트 하기 쉽다.
1.2.4 무료 오픈소스
- 무료 오픈소스, 주요 IDE와 빌드시스템 완전 지원
1.3 코틀린 응용
1.3.1 코틀린 서버 프로그래밍
- 브라우저에서 HTML 페이지를 반환하는 웹 애플리케이션 개발 가능
- 모바일 애플리케이션에서 HTTP 를 통해 JSON API를 제공하는 백엔드 애플리케이션 개발 가능
- RPC 프로토콜을 통해 서로 통신하는 MSA 가능
1.3.2 코틀린 안드로이드 프로그래밍
1.4 코틀린의 철학
자바와 상호운영성에 초점을 맞추고 실용적, 간결, 안전한 언어
안정성
- NPE를 없애기 위해 노력
- ClassCaseException 방지
- 어떤 객체를 다른 타입으로 cast 하기 전에 미리 검사하지 않으면, ClassCaseException이 발생할 수 있다.
- Java에서는 귀찮아서 타입 검증을 생략하는 경우가 많은데, 코틀린은 타입검사와 cast가 연산자에 의해 이루어 진다.
if(value is String)
println(value.toUpperCase())
상호운용성
- 코틀린의 클래스나 메소드를 일반적인 자바 클래스나 메소드와 똑같이 사용 가능, 자바와 코틀린 코드를 프로젝트에서 섞어서 사용이 가능하다.
- 기존 Java에서 사용하는 라이브러리 그대로 사용 가능
출처 : (서적) Kotlin in Action 드미트리 제메로프, 스베트라나 이사코바 저자 /오현석 옮김