Kotlin In Action (1)

sixhustle·2021년 2월 15일
0

Kotlin

목록 보기
1/2

Kotlin In Action 1장 코틀린이란 무엇이며, 왜 필요한가? 내용을 요약했습니다.
아래의 코드는 http://try.kotl.in에서 실행해볼 수 있습니다.

코틀린이란 ?

코틀린은 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어다. 자바 코드와의 상호운용성을 중시한다.

1.1 코틀린 맛보기

1  data class Person(val name: String,
2                    val age: Int? = null)
3
4  fun main(args: Array<String>) {
5  	val persons = listOf(Person("철수"),
6                            Person("영희", age = 29))
7    
8    val oldest = persons.maxBy { it.age ?: 0 }
9    println("나이가 가장 많은 사람: $oldest")
10 }
  1. data class를 정의합니다.
  2. Int?는 Int형 nullable을 의미하고, null은 default값을 의미합니다.
  3. 철수는 Person(name: "철수", age: null) 입니다.
  4. 영희는 Person(name: "영희", age: 29) 입니다.
  5. maxBy 함수에 전달한 람다 식은 it 파라미터를 받습니다. person과 같은 다른 값을 사용하니 에러가 발생했습니다. 엘비스 연산자 ?: 는 age가 null이면 0을 반환합니다. 아니면 age를 반환합니다.

1.2 코틀린의 주요 특성

1.2.1 대상 플랫폼

코틀린의 주목적은 자바가 사용되고 있는 곳에 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것입니다.

1.2.2 정적 타입 지정 언어

코틀린은 타입 추론, nullable type, function type을 지원합니다.

정적 타입 지정 언어 & 타입 추론 지원

코틀린은 자바와 동일하게 정적 타입 지정 언어입니다.

  • 정적 타입 지정 언어: 컴파일시에 구성 요소의 타입을 지정합니다.
  • 동적 타입 지정 언어: 런타임시에 데이터 타입이 지정합니다.

컴파일러가 문맥을 고려해 변수 타입을 결정하는 기능을 타입 추론(type inference)라 합니다.
코틀린은 아래의 코드에서 x의 타입이 Int임을 자동으로 알아내며 정적 타입 지정 언어의 불편함을 해소합니다.

val x = 1

nullable type

코틀린은 null이 될 수 있는 타입을 지원합니다.
nullable을 지원함에 따라 컴파일 시점에 null pointer exception여부를 검사할 수 있어 신뢰성을 높일 수 있습니다.

function type

코틀린은 function type을 지원합니다.

함수형 프로그래밍 특징

  1. 함수를 변수에 저장할 수 있습니다.
  2. 함수를 인자로 다른 함수에 전달할 수 있습니다.
  3. 불변성 : 내부 상태가 바뀌지 않는 불변 객체입니다.
  4. 부수 효과 없음 : 입력이 같으면 항상 같은 출력을 내고, 다른 것과 상호작용하지 않는 순수 함수를 사용합니다.
  5. 강력한 추상화를 할 수 있고, 코드 중복을 막을 수 있습니다.
  6. 다중 스레드에서 안전합니다.

1.4 코틀린의 철학

1.4.1 실용성

  • 코틀린은 이미 성공적으로 검증된 해법과 기능에 의존한 언어입니다.

1.4.2 간결성

  • Getter/Setter와 생성자 등 준비 코드를 코틀린은 묵시적으로 제공합니다.
  • 다양한 표준 라이브러리로 컬렉션에서 원소를 찾는 등 반복되거나 길어질 수 있는 코드로 대치할 수 있습니다.

1.4.3 안전성

  • 더 큰 안전성을 얻기 위해서는 프로그램에 더 많은 정보를 덧붙여야하기 때문에 생산성이 하락할 수 있습니다.
  • JVM에서 실행되므로 메모리 안전성을 보장, 버퍼 오버플로를 방지 등 다양한 문제를 예방할 수 있습니다.
  • NullPointerException, ClassCastException과 같이 구조적으로 일부 오류를 방지할 수 있습니다.

NullPointerException

코틀린은 null이 될 수 없는 값을 추적하며, 실행 시점에 NPE이 발생할 수 있는 연산을 사용하는 코드를 금지합니다.

val s: String? = null // null 될 수 있음
val s: String = ""    // null 될 수 없음

ClassCastException

코틀린은 타입 검사와 캐스트가 한 연산자에서 이뤄집니다.

if (value is String)
   println(value.toUpperCase())

1.4.4 상호운용성

  • 코틀린은 자바의 기존 라이브러리를 그대로 사용할 수 있습니다.
  • 코틀린은 기존 자바 라이브러리를 최대한 활용합니다. (코틀린은 자체 컬렉션이 없고, 자바 표준 라이브러리에 의존합니다.)
  • 위 의미는 자바와 코틀린 사이에 아무런 장치없이 연동된다는 의미입니다.

1.5 코틀린 빌드 과정

  1. 코틀린 컴파일러는 .kt 코드를 분석해서 .class 파일을 만듭니다.
  2. 코틀린 컴파일러로 컴파일 된 코드는 코틀린 런타임 라이브러리에 의존합니다. 런타임 라이브러리에는 코틀린 표준 라이브러리와 자바 API의 기능을 확장한 내용이 들어있습니다. 따라서, 배포할 때는 런타임 라이브러리도 함께 배포해야 합니다.

ETC

  • 코틀린 표준 라이브러리 함수는 인자로 받은 람다 함수를 inlining합니다. 따라서 람다를 사용해도 새로운 객체가 만들어지지 않으므로 객체 증가로 인한 gc가 늘어나지는 않습니다.

References

0개의 댓글