1. A Taste of Kotlin

2022. 2. 3. 16:59코틀린 (Kotlin)/코틀린 기본 (Kotlin Basics)

본 장은 Kotlin in Action 책을 기반으로 작성되었습니다.

 

코틀린은 Java를 사용하는 모든 프로그램에서 사용할 수 있습니다.

단지 Java보다 더 정교하고, 생산적이며 안전한 대체 수단을 제공할 목적으로 만들어졌을 뿐입니다.

 

 


Philosophy

 

1. Pragmatic

코틀린은 실제 프로그래밍을 하면서 겪었던 여러 불편한 점들을 개선하기 위해 고안된 '실용적인 언어'입니다. 수 년간, 각지의 산업체 또는 개발자로부터 제공되는 피드백들은 코틀린을 형성하고 그 문제를 해결하는 데 많은 도움을 주었습니다.

따라서 코틀린을 통한 개발은, 어떤 패턴과 패러다임에 국한되어 가기보다는 본인이 가지는 친숙한 프로그래밍 경험과 함께 더 파워풀한 요소들로 발전해나가는 것입니다.

 

 

2. Tooling

코틀린은 다양한 플러그인 또는 IDE 환경과 잘 어울리도록 설계했습니다. 현재의 개발 환경은 너무나 스마트하기 때문에 잘 접목시킨다면 더할나위 없이 간단한 코드 패턴과 정교한 구조, 그리고 개발 생산성을 챙길 수 있기 때문입니다. (요즘은 코드도 자동으로 고쳐주기까지 합니다)

 

 

3. Concise

평소 개발자들은 새로운 코드를 작성하기보다는 기존 코드를 읽고 이해하는 데 더 많은 시간을 소비합니다. 만일 대형 프로젝트에서 어떤 이슈가 발생했을 때, 작성된 코드가 더럽(?)다면 그것만큼 최악인 경우는 없겠죠. 간단함을 넘어서 명료함은 개발자가 코드를 더욱 빠르게 이해할 수 있도록 돕고, 정확히 개선할 방향을 정하는 데 도움을 줍니다. 코틀린은 이와 관련해 몇 가지를 소개합니다.

  • 기존 Java에서 반복적으로 쓰였던 getters나 setters, constructor parameters를 명시할 필요가 없습니다.
  • 콜렉션 내 어떤 값을 찾기 위해서 순수 알고리즘을 만들 필요 없이, 풍부한 라이브러리 내에서 찾아 쓰면 됩니다.
  • 개발자 스스로 본인만의 연산자를 만들 수 없게 하여 해석 여지를 주지 않도록 합니다.

 

4. Safe

여기서 '안전'하다고 하는 건, 해당 언어로 개발된 프로그램에서 어떤 에러가 발생하지 않는다는 것을 의미합니다. 당연히 에러를 100% 방어하는 언어는 지구상에 없습니다. 단지 가능한 한 발생할 수 있는 에러를 방지하는 것이 중요합니다.

코틀린은 적은 비용으로 안전성을 높히는 데 집중했습니다. 가령, Java에서 쉽게 볼 수 있는 NPE(NullPointerException)와 같은 경우, nullable을 명시함으로 어느정도 커버가 가능해졌습니다.

val s: String? = null
val s2: String = ""

위 예제에서 s2의 경우 not null로 선언되었기 때문에 null을 할당할 수 없습니다. 이 뿐만 아니라 자료형 검증도 쉽게 할 수 있습니다.

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

 

 

5. Interoperable

'기존에 사용하던 라이브러리는 코틀린에서도 사용할 수 있을까?'에 대한 물음에, 가능하다고 말할 수 있습니다.

그 어떤 트릭도 사용하지 않고, 코틀린은 기존에 사용하던 라이브러리의 자바 클래스 및 메소드를 그대로 가져와 사용할 수 있습니다.

그 비밀은 코틀린 빌드 과정에 있습니다.

Kotlin Build Process

 

코틀린 컴파일러는 Java 컴파일러와 동일하게 .class 파일을 생성합니다. 그리고 어플리케이션을 배포할 때, Kotlin Runtime Library가 코틀린의 standard library classes와 extentions을 추가합니다.

특히 이러한 구조로, Maven이든, Gradle 또는 Ant 등 거의 대부분의 build system과 잘 어울립니다.

 

 

 


Features

 

코틀린에서 쓰이는 몇 가지 특징들을 소개합니다.

 

1. Type Inference

Java와 마찬가지로, 코틀린은 정적 타입(statically typed) 프로그래밍 언어입니다. 이는 어떤 표현식에 쓰이는 자료형이 컴파일 시간에 알아야 됨을 의미합니다. 그러나 조금 다른 건, 코틀린은 상세한 자료형을 입력하지 않아도 됩니다.

val x = 1

위와 같이 변수 x를 선언한다면, 코틀린은 자동으로 컴파일 시간에 x를 Int 자료형으로 결정합니다. 이를 Type Inference라고 합니다.

Type Inference는 다음과 같은 장점이 있습니다.

  • Performance : 메소드를 호출할 때, 어떤 메소드를 호출할 지 찾지 않아도 됩니다.
  • Reliability : 컴파일러가 해당 타입이 올바른 지 검증하기 때문에 오류 발생을 줄입니다.
  • Maintainability : 친숙하지 않은 코드여도 어떤 객체를 사용했는 지 잘 알아낼 수 있습니다.
  • Tool Support : 정적 자료형은 IDE 등으로 코드 완성도를 높일 수 있습니다.

 

2. Functional Programming

  • First-class Function : 함수를 값(value)로 취급해서 사용할 수 있습니다. 가령 변수에 함수를 저장해서 인자를 넣거나 리턴을 받는 등의 작업을 할 수 있습니다.
  • Immutability : 불변 객체(immutable object)를 사용할 수 있도록 합니다.
  • No side effect : 인자로 전달되는 객체의 상태나 값을 변경하지 않고 동일한 입력에, 동일한 결과를 얻을 수 있는 순수 함수 형태로 사용할 수 있습니다.

 

 

 


Summary

 

이상으로, 코틀린에 대한 배경 설명을 마쳤습니다.

마지막으로 책에 수록된 요점 정리를 가져와 작성하겠습니다.

- Kotlin supports both object-oriented and fuctional programming styles, enabling higher-level abstractions through first-class functions and simplifying testing and multithreaded development through the support of immutable values.
- It works well for server-side applications, fully supporting all existing Java frameworks and providing new tools for common tasks such as HTML generation and persistence.
- It's free and open source, with full support for the major IDEs and build systems.
- Kotlin is pragmatic, safe, concise, and interoperable, meaning it focuses on using proven solutions for common tasks, preventing common errors such as NullPointerExceptions, supporting compact and easy-to-read code, and providing unrestricted intergration with Java.