Kotlin Weekly

Kotlin Weekly # -385 "Kotlin Compiler Plugins"

베블렌 2023. 12. 18. 09:05

12월 3주차에는 코틀린 컴파일러에 대한 글입니다.

 

https://kt.academy/article/ak-compiler-plugin

 

Kotlin Compiler Plugins

All you need to know about Kotlin Compiler plugins.

kt.academy

 

 

 

 

소개

이 글은 Kotlin 컴파일러와 그 플러그인에 대해 설명하고 있습니다. Kotlin 컴파일러는 Kotlin 코드를 컴파일하는 동시에 IDE에서 코드 완성, 경고 등을 제공하는 데 사용됩니다. Kotlin 컴파일러 플러그인은 컴파일러의 동작을 변경하는 데 사용되며, 특정 클래스를 확장하고 등록함으로써 정의됩니다.

 

 

내용

컴파일러의 구조:

  • Frontend: Kotlin 코드를 분석하고 다른 형식으로 변환하는 역할을 합니다. 이 과정은 타겟 플랫폼과 독립적으로 수행됩니다.
  • Backend: Frontend에서 변환된 코드를 특정 플랫폼(예: JVM, JS, Native)에 맞는 저수준 코드로 변환합니다. Backend는 각 타겟에 특화되어 있습니다.

 

 

컴파일러 확장:

  • Frontend 확장: 특정한 컴파일 단계에 개입하여 컴파일 과정의 결과를 변경할 수 있습니다. 예를 들어, 클래스에 추가적인 상위 타입을 제공하는 확장이 가능합니다.
  • Backend 확장: 'IrGenerationExtension'은 유일한 Backend 확장으로, Kotlin 중간 표현(IR)을 수정할 수 있습니다. 이는 코드의 거의 모든 것을 변경할 수 있지만, 코드 분석이나 IDE 제안에 영향을 미치지 않습니다.

컴파일러 플러그인의 예:

  • Kotlin Serialization: Kotlin 클래스의 직렬화 메소드를 생성하는 플러그인입니다.
  • Jetpack Compose: UI 프레임워크로, 컴포저블 함수를 변환하여 UI를 생성합니다.
  • Arrow Meta: 함수형 프로그래밍 기능을 지원하는 플러그인입니다.
  • Parcelize: Kotlin 클래스에 대한 Parcelable 구현을 생성합니다.
  • All-open: 특정 어노테이션으로 마크된 모든 클래스를 기본적으로 open으로 만듭니다.

Kotlin 컴파일러 플러그인 개발

  • 플러그인 개발은 Kotlin 컴파일러의 소스 코드 분석과 기존 플러그인의 참고가 필요합니다.
  • 사용에 주의가 필요하며, 잘못된 사용은 코드에 심각한 문제를 일으킬 수 있습니다.
  • 개발자들은 플러그인을 통해 컴파일 과정을 변경하거나 새로운 기능을 추가할 수 있습니다.

개발자에게의 의미

  • Kotlin 컴파일러 플러그인은 Kotlin 언어의 유연성과 확장 가능성을 보여줍니다.
  • 이러한 플러그인은 새로운 기능을 개발하거나 기존 기능을 개선하는 데 사용될 수 있습니다.
  • Jetpack Compose와 같은 플러그인은 Kotlin 컴파일러 플러그인의 잠재력을 보여주는 예입니다.

 

K2와 관련된 작성글 :

 

https://veblen.tistory.com/12

 

Kotlin Weekly # -372 "코틀린 컴파일러 - K2"

9월 3주차에는 멀티플렛폼을 제외하고 눈에 먼저 들어왔습니다.(맨위이기도 했습니다.) https://proandroiddev.com/lets-talk-about-kotlin-k2-3e1c6f10d74 Let's Talk about Kotlin K2 Kotlin is now 13 years old! Yeah, a teenager. And

veblen.tistory.com

 

정리

Kotlin 컴파일러 플러그인은 아직 초기 단계이며 변경 가능성이 높으므로 신중하게 사용해야 합니다. Jetpack Compose 같은 플러그인은 Kotlin 컴파일러 플러그인의 잠재력을 잘 보여줍니다.

이러한 K2 도입으로 컴파일러의 성능과 효율성은 상승할 것이고, Kotlin이 KMP를 비롯하여 다재다능한 언어로 되어가는게 마음에 듭니다. java를 대체해버리는 날이 왔으면 싶습니다. 

 

 

 

 

 

http://kotlinweekly.net/

 

** Kotlin Weekly **

 

kotlinweekly.net