Post

Java Language Syntax Extension

혹시 당신은 프로그래밍 언어를 다양하게 사용 하는가? 난 새로운 언어를 배우고, 그것을 연습해 보는 것을 일종의 취미생활로 하고 있다.

그 과정에서 언어의 특성과 장단점을 익히고, 다음 프로젝트에서는 지금까지 써본 언어중 프로젝트에 잘 맞는 최적의 언어를 선정하곤 한다.

그러다 보면 각 언어에서 굉장히 유용한 기능들을 알게되는데… 사실 그런 기능은 대부분의 언어가 공통적으로 가지고 있는 경우가 많다. 그러나 현실에는 그렇지 않은 언어가 하나 존재하고, 그게 바로 Java이다. Java는 언어의 개선이 정말 느리고 기능이 모자란 편이다.

하지만 난 최근 10년간 JVM 위에서 개발을 할 때는(1년빼고는) Scala 혹은 Kotlin 으로 작업을 하기 때문에 Java 자체에는 별 관심을 안가지고 JVM 변경에만 관심을 가지는데, 그러던 나에게 지인에게서 질문이 들어왔다. 조건부 컴파일을 Kotlin 에서 쓸 수 있냐는 것이다. 사실 난 그게 필요한 업무를 전혀 하지 않고 있기 때문에 알아만 두고 쓰지 않았던 Java 플러그인을 하나 소개한다.

Link : Manifold

상당히 강력한 기능을 자랑하는 Plugin 인데, 개발툴 지원이 IntelliJ 계열 뿐이라 Eclipse 에서 사용하기는 굉장히 번거롭다. 물론 난 회사에서 Eclipse 쓰면 탈주 하길 추천한다.
IntelliJ 플러그인은 다음 링크에 있다 Link : Manifold-IntelliJ-Plugin

그래서 해당 Plugin 에서 제공하는것 중 유용한 몇가지 기능을 소개한다 해당 기능이 경쟁 언어(C#, Kotlin, Scala) 에도 대부분 존재하는 것이라, 사용이 가능하면 Java를 최신 언어 답게 만들어주는 편리한 기능이라 할 수 있겠다

  • Extention Method
    • 소스 수정 없이 Class에 Method를 추가한다
    • 같은 기능을 가진 언어 : C#, Kotlin, Scala
  • Properties
    • JavaBean Style 의 Property 를 getter / setter 없이 사용 가능하게 한다
    • 같은 기능을 가진 언어 : C#, Kotlin, Scala
  • Operator Overloading
    • 연산자 오버로딩 기능을 추가한다
    • 같은 기능을 가진 언어 : C#, Kotlin, Scala
  • Tuple expressions
    • Tuple, NamedTuple 을 생성하는 Syntax Sugar를 지원한다 C# 스펙과 완전히 같음
    • 같은 기능을 가진 언어 : C#, Scala(NamedTuple 은 지원 안함)
  • Preprocessor
    • 조건부 컴파일을 지원한다
    • 같은 기능을 가진 언어 : C#
  • Type-safe Reflection
    • @Jailbreak 어노테이션을 지원한다
    • private 의 접근 제어를 해제함. 테스트 코드 작성에 유리하다(사실 난 이것때문에 Java 테스트 시에는 Spock 를 선호했었다)
    • 같은 기능을 가진 언어 : 없음
This post is licensed under CC BY 4.0 by the author.