그럼, 자바 말고 다른 언어는 JVM 위에 올릴 수 없나요?

JVM은 Java 전용이 아니라 바이트코드(.class) 규격만 맞으면 어떤 언어든 실행할 수 있는 범용 실행 플랫폼입니다.

왜 가능한가

JVM이 실행하는 것은 Java 소스코드가 아니라 바이트코드입니다. 어떤 언어든 자체 컴파일러가 JVM 바이트코드를 생성할 수 있으면 JVM 위에서 동작합니다.

Java     ─── javac ───┐
Kotlin   ─── kotlinc ──┤
Scala    ─── scalac ───┤──→  .class (바이트코드)  ──→  JVM  ──→  OS/CPU
Groovy   ─── groovyc ──┤
Clojure  ─── clojure ──┘

주요 JVM 언어

언어등장특징대표 사용처
Kotlin2011Java 완전 호환, 간결한 문법, Null 안전성Android 공식, Spring 생태계
Scala2004함수형 + 객체지향 혼합, 강력한 타입 시스템대규모 데이터 처리 (Spark, Akka)
Groovy2003동적 타이핑, 스크립트 지향Gradle 빌드, Jenkins 파이프라인
Clojure2007Lisp 계열 함수형, 불변 데이터 중심동시성 처리, 데이터 파이프라인
JRuby2001Ruby를 JVM 위에서 실행Ruby 앱의 JVM 마이그레이션
Jython1997Python을 JVM 위에서 실행Java-Python 통합

실제 코드 비교 — 같은 바이트코드, 다른 문법

Java

public class Hello {
    public static void main(String[] args) {
        var list = List.of("A", "B", "C");
        list.stream()
            .filter(s -> s.equals("A"))
            .forEach(System.out::println);
    }
}

Kotlin

fun main() {
    val list = listOf("A", "B", "C")
    list.filter { it == "A" }
        .forEach(::println)
}

Scala

@main def hello(): Unit =
  val list = List("A", "B", "C")
  list.filter(_ == "A")
      .foreach(println)

세 코드 모두 컴파일하면 동일한 JVM 바이트코드 규격을 따르는 .class 파일이 생성되고, 같은 JVM 위에서 실행됩니다.

JVM 언어의 장점

JVM 위에 올리면 해당 언어가 단독으로는 갖지 못하는 이점을 얻게 됩니다.

장점설명
Java 생태계 활용수십만 개의 Java 라이브러리를 그대로 import 가능
상호 운용Kotlin에서 Java 클래스 호출, 반대도 가능
JVM 성능 혜택JIT 컴파일, GC, 멀티스레딩 최적화를 동일하게 누림
플랫폼 독립성Write Once, Run Anywhere 그대로 적용
성숙한 도구jconsole, jstack, VisualVM 등 모니터링 도구 공유

상호 운용 예시 (Kotlin ↔ Java)

// Kotlin에서 Java 라이브러리 직접 사용
import java.util.HashMap

fun main() {
    val map = HashMap<String, Int>()   // Java 클래스를 Kotlin에서 사용
    map["score"] = 100
}
// Java에서 Kotlin 클래스 직접 사용
public class Main {
    public static void main(String[] args) {
        MyKotlinClass obj = new MyKotlinClass();  // Kotlin 클래스를 Java에서 사용
        obj.greet();
    }
}

GraalVM — JVM 언어를 넘어서

GraalVM은 JVM 기반이면서도 비 JVM 언어까지 실행할 수 있는 확장 런타임입니다.

┌────────────── GraalVM ──────────────┐
│                                      │
│  JVM 언어: Java, Kotlin, Scala       │
│  추가 지원: JavaScript, Python,      │
│            Ruby, R, LLVM(C/C++)     │
│                                      │
│  + AOT 컴파일 (native-image)        │
│    → JVM 없이 실행 가능한 바이너리    │
└──────────────────────────────────────┘

핵심 정리

JVM은 바이트코드 실행 플랫폼이지 Java 전용 머신이 아닙니다. Kotlin, Scala, Groovy 등 다양한 언어가 JVM 위에서 동작하며, Java의 방대한 라이브러리 생태계와 JIT·GC 같은 성능 최적화를 그대로 공유합니다. 특히 Kotlin은 Android 공식 언어로 채택되면서 현업에서 Java만큼 자주 접하는 JVM 언어가 되었습니다.

CSLOG에서 보기