Reading/Kotlin in Action

[Kotlin in Action] 1.코틀린이란 무엇이며 왜 필요한가

예민한고라니 2023. 2. 5. 13:28

코틀린 주요 특성

  1. 정적 타입 지정 언어
    • 자바와 마찬가지로 코틀린도 정적 타입 (statically typed) 지정 언어
      • 모든 프로그램 구성요소의 타입을 컴파일 시점에 알 수 있음
      • 객체의 필드나 메서드를 사용할때 마다 컴파일러가 타입을 검증해줌
      • +) 대표적인 동적타입 지정언어로는 그루비나 JRuby가 있음
    • 자바와 달리 코틀린에서는 모든 변수의 타입을 프로그래머가 명시할 필요가 없음.
      • 대부분의 경우 코틀린 커파일러가 문맥으로부터 변수 타입을 자동으로 유추할 수 있기 떄문
      • 이런 기능을 타입 추론 (type inference)라고 부름
    • 정적 타입의 장점
      • 성능 : 실행시점에 어떤 메서드를 호출할지 알아내는 과정이 필요 없으므로 메소드 호출이 더 빠름
      • 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 떄문에 프로그램 오류로 중단될 가성 작음
      • 유지보수성 : 객체의 타입을 알수 있어서 처음보는 코드를 다룰때도 쉬움
      • 도구지원 : 정적 타입 지정을 활용하면 더 안전히 리팩토링 할 수 있음
    • type system에서 자바와 다른 새로운 점
      • 코틀린은 널이 될 수 있는 타입(nullable type)을 지원함
        • 컴파일 시점에 null pointer exception 여부를 검사할 수 있어 신뢰성이 상승함 (6장에 추가 설명)
      • 함수 타입 (function type)에 대한 지원
  2. 함수형 프로그래밍 과 객체지향 프로그래밍
    • 함수형 프로그래밍 특징
      • first-class. 함수를 일반값처럼 다룰수도, 변수에 저장할수도, 함수를 인자로 다른 함수에 전달할수도 있음
      • immutability. 한번만들어지면 내부상태가 절때 바뀌지 않는 불변객체를 사용함
      • side-effect 없음. 입력이 같으면 출력이 항상같음 → 함수 외부나 바깥과 상호작용하지 않음
    • 장점
      • 간결성
      • safe multithreading
      • 테스트가 쉬움
    • 자바도 8부터는 지원하지만, 코틀린은 초기부터 함수형 프로그래밍을 풍부하게 지원해왔음
  3. 무료 오픈소스

코틀린 응용

  1. 코틀린 서버 프로그래밍
    • 서버 프로그래밍에는 광범위한 분야들이 포함됨
      • 브라우저에 html 페이지를 돌려주는 웹
      • JSON API를 제공하는 BE
      • RPC 프로토콜로 서로 통신하는 마이크로 서비스
    • 코틀린은 자바코드와 매끄럽게 상호운용한다는 장점 존재
    • 동시에, 몇가지 새로운 기술을 활용해 서버 시스템 개발가능
      • 예를들어 코틀린의 빌더 패턴(Builder pattern)활용하면 간결한 구문 사용해 그래프를 쉽게 구축하면서도 코드 재활용을 지속적으로 누릴 수 있음
      • 다른예로 영속성 프레임워크를 들수 있음. SQL DB 구조를 기술할 수 있는 읽기쉬운 DSL 제공

코틀린의 철학

  • 코틀린은 자바와의 상호운용성에 초점을 맞춘 실용적이고 간결하며 안전한 언어
  1. 실용성
    • 실제 문제를 해결하기위해 만들어진 실용적 언어이며 연구를 위한 언어가 아님
    • 코틀린은 어느 특정 프로그래밍 스타일이나 패러다임을 사용할 것을 요구하지 않음
    • 항상 도구의 활용을 염두에 두고 설계되어왔음
  2. 간결성
    • 개발자는 기존의 코드를 읽는 시간이 더 길다. 따라서 간결한 코드는 내용파악에 도움 됨
    • 코틀린은 별 뜻은 없지만 꼭 넣어야하는 부수적인 요소를 줄이기 위해 노력함
      • ex) getter, setter 등
    • 그렇다고 소스코드가 짧다 ≠ 간결하다
  3. 안전성
    • 안전하다 = 일부 유형의 오류를 프로그램 설계가 원천적으로 방지해준다는 의미
      • 대게 생산성과 안전성 사이에는 trade off 관계가 설립한다.
    • JVM에서 실행되는 정적타입언어로서 코틀린은 애플리케이션 타입 안전성을 보장함
      • but, 자바보다 더 적은 비용으로 타입 안전성 사용가능 → 직접 타입 정보를 지정할 필요가 없기 때문임
    • 더 나아가 컴파일 시점 검사를 통해 오류를 더 많이 방지해줌
      • 특히 NullPointerException을 없애기 위해 노력함
        • 발생할 수 있는 연산을 사용하는 코드를 금지하기 때문
      • classCastException도 방지해줌
        • 어떤 객체를 다른 타입으로 cast 하기 전에 미리 검사하지 않으면 발생할 수 있음
        • 코틀린에서는 타입 검사와 캐스트가 한 연산자에 의해 이뤄짐
  4. 상호운용성
    • 라이브러리가 어떤 API를 제공하던 코틀린에서 그 API를 활용할 수 있음
    • 코틀린은 기존 자바 라이브러리를 최대한 활용하는 데에 집중
      • 자체 컬렉션 라이브러리를 제공하지 않으며 자바 표준 라이브러리 클래스에 의존함

코틀린 도구 사용

  • 코틀린 역시 자바와 마찬가지로 컴파일 언어, 앞으로 컴파일 과정과 어떤 도구가 사용되는지 이야기 할것
  1. 코틀린 코드 컴파일
    • 코틀린 소스코드 저장에는 보통 .kt라는 확장자를 파일에 붙임
    • 컴파일한 코드는 코틀린 런타임 라이브러리에 의존함