코틀린 스터디 1장 정리 - 코틀린 맛보기

Posted by 김순철 on September 25, 2018

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 요약

  • 코틀린은 타입 추론을 지원하는 정적 타입 지정 언어다.
  • 객체지향과 함수형 프로그래밍 스타일을 모두 지원한다.
  • 서버 애플리케이션 개발에 활용할 수 있다.
  • 안드로이드에도 활용할 수 있다.
  • 무료이며 오픈소스이다.
  • 실용적이며 안전하고, 간결하며 상호운영성이 좋다.