본문 바로가기

Kotlin

Kotlin in Action - 1장. 코틀린이란? 왜 필요한가?

요즘 코틀린으로 전환하거나 이미 사용하고 있는 기업이 많다. 코틀린의 어떤점이 좋길래??

 

코틀린의 주요 특성

  • 대상 플랫폼 : 서버, 안드로이드 등 자바가 실행되는 모든 곳
    • 코틀린 -> 자바스크립트로 컴파일이 됨 ( 브라우저, 노드에서 실행 가능 ) : kotlin-natvie-backend 개발 진행 중
  • 정적 타입 지정 언어 ( statically typed )
    • 자바와 다르게 타입 명시 안해도 됨. 코틀린 컴파일러가 문맥으로부터 유추하기 때문 ( type inference)
    • 장점
      • 성능 : 런타임에 어떤 메소드를 호출알지 알아내느 과정 필요 없음
      • 신뢰성 : 컴파일러가 검증해줌
      • 유지 보수성 : 처음 볼 때 타입이 있으니 보기 좋음
      • 도구 지원 : 리팩토링 등 IDE에서 기능
    • 코트린에 정적 타입 중 nullable type이 있음 -> null point exception 방지
    • function type -> 함수형 프로그래밍이 가능
  • 함수형 프로그래밍
    • 핵심 개념 
      • first-class function : 함수를 일반 값처럼 다룰 수 있다. 함수를 변수에 저장할 수 있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어서 반환할 수 있다
      • immutability : 함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그래밍 작성
      • side effect 없음 : 입력이 같으면 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 외부 환경과 상호작용하지 않는 순수 함수를 사용함
    • 코틀린에서 함수형 프로그래밍을 위해 어떤걸 지원
      • 함수 타입을 지원
      • 람다 식 지원
      • 데이터 클래스는 불변적인 값 객체를 간편하게 만들 수 있는 구문 제공
      • 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API 제공
    • 어떤 점이 좋을까?
      • 간결성 : 더 강력한 추상화 ( abstraction )
      • 다중 스레드에 안전 : 불변 데이터 구조를 사용하고 순수함수를  그 데이터 구조에 적용하기 때문
      • 테스트하기 쉬움 : 다른 준비물이 필요없음
fun findAlice() = findPerson { it.name == "Alice" }
fun findBob() = findPerson { it.name == "Bob" } 

 

코틀린을 사용하더라도 성능 측면에서 아무 손해가 없음

  • 코틀린 컴파일러가 생성한 바이트코드는 자바 코드와 똑같이 실행됨
  • 코틀린의 런타임 시스템도 상당히 작기 때문에 애플리케이션 크기도 거의 그대로임
  • 코틀린 표준 라이브러리 함수는 인자로 받은 람다 함수를 inlining 하기 때문에 새로운 객체가 생성되지 않으므로 GC가 늘어나서 프로그램이 자주 멈추는 일도 없음


  • 코틀린 철학
    • 실용성 : IDE 지원 / 프로그래밍 스타일, 패러다임 강요를 하지 않음 ( 자바, 코틀린 스타일 둘다 사용 가능 ) / 쉽게 배울 수 있음
    • 간결성 : 코드가 간결해짐
    • 안전성
    • 상호운영성