Kotlin in action 1부

nhs312
0

Kotlin in action

1부 - Kotlin 소개

1장 - 코틀린이란 무엇이며, 왜 필요한가?

  • 핵심 전제는 interoperability 상호운용성 즉, 자바를 사용 중인 곳에서 코틀린도 사용 가능 해야 한다는 것
  • 코틀린은 웹 앱의 백엔드, 브라우저나 노드(JS에서 컴파일 가능), 모바일 앱 등 광범위하게 사용 가능

주요 특성

  • Statically typed programming language(정적 타입 지정 언어)
    프로그램 구성 요소 타입을 컴파일 시점에 알 수 있고 객체의 field나 method를 사용할 때마다 컴파일러가 타입을 검증해준다는 것
  • dynamically typed PL(동적 타입 지정 언어)
    타입과 관계 없이 모든 값을 변수에 넣을 수 있고 검증이 실행 시점에 일어난다. 장단이 있는데 컴파일 시 오류를 잡아낼 수 없지만 간결함

정적 타입 지정의 장점 : 성능, 신뢰성, 유지보수성, 도구 지원

Type inference(타입 유추)

  • 코틀린은 모든 변수의 타입을 직접 명시할 필요는 없음
  • 컴파일러가 문맥을 고려해 변수 타입을 결정

함수형 프로그래밍

  • first-class function : 함수를 인자, 일반 값처럼 사용할 수 있음
  • immutablility - 불변 객체 사용
  • no side effect - pure function을 사용하여 객체의 상태를 변경하지 않으므로 부작용이 적음
Benefits of functional programming
  • imperative(명령형) code에 비해서 compact
    • lambda expression(anonymous function)을 사용하면 인자 그 자체가 함수
  • safe multithreading
    • 여러 스레드가 같은 데이터를 사용할 때 동기화가 제대로 안되면 문제 발생 -> pure function, immutability 를 이용하여 해결
  • test
    • pure function 은 테스트가 훨씬 더 쉬움
코틀린의 함수형 프로그래밍 지원
  • 함수 타입 지원 -> 함수가 다른 함수를 인자로 받거나 함수를 반환
  • 람다 지원
  • data class -> value object를 간편하게 생성할 수 있도록 지원
  • 객체와 컬렉션에 대한 함수형 스타일 API 제공
  • 꼭 함수형 프로그래밍을 강제하는 것이 아님.
    명령형 프로그래밍으로 사용하든 조합해서 사용하든 가장 적합하게 코딩하는 방법을 지향

코틀린의 철학

실용성

  • 코틀린은 새로운 연구를 위한 언어가 아님
  • 여태껏 검증된 방법과 기능을 토대로 더 나은 프로그래밍을 하기 위함
  • 코틀린의 특성을 이용해 복잡도를 줄여 간결하게 프로그래밍해서 생산성이 오르길 기대

간결성

  • 코드를 작성할 때의 나 != 코드를 읽는 현재의 나 == 처음 코드를 보는 사람
  • 짧은 코드 != 간결함
  • 내용과 의도를 파악하기 쉬운 코드 = 간결함
    • 갈결하기 위해서는 언어적 특성도 필요
    • 부수적인 부가 코드(e.g. getter, setter, constructor), 명시적인 코드(e.g. collection 에서 원소 찾기)를 줄일 수 있는 것
    • 결국 이런 code writing이 줄어든다는 것은 reading에도 긍정적인 영향

안전성

  • JVM을 사용함으로써 이미 memory, buffer overflow, type safe 등을 보장
  • NPE(NullPointerException)를 막기 위한 nullable type 지원
val s: String? = null
val s2: String = "domino"
  • ClassCastException 방지 지원
if(value is String)
 println(value.toUpperCase())

상호운용성

  1. 자바 라이브러리를 그대로 사용 가능한가? -> YES
  2. 코틀린의 메소드/클래스를 그대로 호출 가능한가? -> YES
  3. 자바와 코틀린 간의 API 호출에 변환이 필요한가? -> NO
  4. 자바 메소드를 리팩토링하면 관련 있는 코틀린 코드까지 리팩토링 가능

Summary

  • 타입 추론을 지원하는 정적 타입 지정 언어다. 따라서 소스코드의 정확성과 성능을 보장하면서 간결하게 유지할 수 있다.
  • 객체지향과 함수형 프로그래밍 지원. first-class function을 사용해 수준 높은 추상화가 가능하고, 불변 값 지원을 통해 다중 스레드 애플리케이션 개발과 테스트를 더 쉽게 할 수 있다.
  • 서버 애플리케이션 개발에 활용 가능. 기존 자바 프레임워크를 완벽하게 지원하고 html이나 persistence의 일반적인 작업을 위한 도구를 제공한다.
  • 안드로이드를 지원하고 무료이며 오픈소스이다. 주요 IDE와 빌드 시스템을 지원한다.
  • 실용적이며 안전하고 간결하며 상호운용성이 좋다. 읽기 쉽고 간결한 코드를 지원하면서 자바와 제약 없이 통합될 수 있는 데 초점을 맞췄다.

#kotlin

댓글 쓰기

0댓글

댓글 쓰기 (0)