Kotlin, 어떻게 동작하나요

Chang W. Doh
TIL: Kotlin in practice (한국어)
3 min readNov 20, 2017

GDG DevFest Seoul 2017에 있었던 세션 발표 자료입니다.

GDG DevFest Seoul 2017 — Kotlin: How it works

아래는 세션 이후에 받은 질문과 그에 대한 답변을 정리하였습니다. 도움이 되셨으면 좋겠습니다.

Q. inline에서 recursive call은 어떻게 처리되나요?

좋은 질문입니다. :)

A. UnsupportedOperationException이 발생합니다.

inline 함수가 코틀린에서 중요한 이유는 람다식의 실행 효율로 인한 문제입니다. 세션에서 얘기한 바와 같이 inline은 함수의 형태로 존재하는 것이 아니라, 호출부에 함수의 코드를 삽입하는 형태로 처리됩니다. 따라서, 호출 비용이 들지 않으므로, filter나 map 같은 경우 특히 효율적으로 동작합니다.

질문하신 경우에는 대부분 tailrec을 이용하여 꼬리재귀를 구현하시는 것이 옳은 방법입니다.

Q. Kotlin은 Java wrapper인가요?

세션을 들으시거나 발표 자료를 보신 뒤에 이 질문을 몇번 받아서 추가로 달아봅니다.

A. 그렇지 않습니다.

특정한 언어로 구현된 코드는 파싱을 거쳐 추상화된 형태(AST)와 추가 정보들을 가지는 1차적인 결과물로 처리됩니다. 보통 이런 역할을 하는 것은 컴파일러에서 전단부(frontend)라고 호칭하며 이러한 AST 등의 결과물은 대상 머신이나 플랫폼에 맞추어 처리됩니다.

인터프리터의 경우 이를 바로 실행하지만, 실행 가능한 형태(Executable)로 생성하는 경우라면 컴파일러 후단부(Backend)가 이를 수행합니다. 백엔드의 타겟 코드는 충분히 다양한 대상을 다룰 수 있으므로, 우리가 다양한 백엔드 구현을 통해 동일 코드를 멀티 플랫폼을 대상으로 실행할 수 있도록 할 수 있는 것입니다.

KOTLIN COMPILER BACKEND TARGETS

코틀린 역시 대상으로 하는 플랫폼(과 머신)은 현재 다음과 같은 실행 가능한 형태를 지원하고 있습니다. (물론 아직 모든 타겟이 완벽하지는 않겠죠.)

  1. Bytecode 포맷에 따른 JVM(안드로이드 포함)
  2. JavaScript에 의한 브라우저나 Node.js
  3. llvm을 이용하여 여러 타겟의 네이티브 코드

해당 세션은 이 중 1번을 기반으로 디컴파일된 코드를 살펴보고 코틀린의 코드 생성 목적이나 언어 설계의 원인(어떤 painpoint)를 찾아보는 과정의 일부였을 뿐입니다.

언어는 항상 요구되는 표현을 위해 가장 적합한 형태로 변화해나갑니다. 프로그래밍 언어는 비교적 단기간에 만들어지는 언어이고, 그에 따라 특정 사람과 집단의 목적에 충실합니다.

이 관점에서 봤을 때도 Kotlin이 Java의 wrapper로써 설계되었을 것보다는 다양한 타겟 플랫폼이 고려되고 있는 하나의 프로그래밍 언어로 이해하셨기를 바랍니다.

--

--

Chang W. Doh
TIL: Kotlin in practice (한국어)

I’m doing something looks like development. Community diver. ex-Google Developer Expert for Web 😎