한 문장으로 보는 자바
자바는 바이트코드로 컴파일되어 자바 가상 머신(JVM) 위에서 실행되는, 정적 타입의 객체 지향 프로그래밍 언어입니다. 이 단 하나의 설계 선택 -중립적인 중간 형식으로 컴파일한 뒤 가상 머신 위에서 실행한다는 것- 이 바로 동일한 컴파일된 자바 프로그램이 Windows, macOS, Linux, 그리고 그 너머에서도 변경 없이 실행되는 이유입니다.
여기 그 필수적인 첫 번째 프로그램이 있습니다. 바로 이 자리에서 실행해 볼 수 있습니다.
스크립트 언어보다 형식적인 격식이 더 많지만, 이는 의도된 것입니다. 자바는 명시적인 구조를 선호합니다. 이 모든 조각을 앞으로 몇 페이지에 걸쳐 하나씩 풀어 보겠습니다.
JVM이 중요한 이유
대부분의 컴파일 언어는 소스 코드를 특정 프로세서와 운영체제용 머신 코드로 곧장 변환합니다. Windows용으로 컴파일된 프로그램은 Mac에서 실행되지 않습니다. 자바는 한 번 우회합니다.
javac가 여러분의.java소스를 바이트코드가 담긴.class파일로 컴파일합니다. 이는 실제 CPU가 아니라 가상의 머신을 위한 명령입니다.- 여러분의 플랫폼용 JVM이 그 바이트코드를 읽어 실행하며, 진행하면서 네이티브 머신 명령으로 번역합니다.
모든 플랫폼이 저마다의 JVM을 갖지만 그것들이 모두 같은 바이트코드를 이해하기 때문에, 한 번 컴파일하면 JVM이 존재하는 어디서든 그 결과를 실행할 수 있습니다. 이것이 그 유명한 구호, 한 번 작성하면 어디서나 실행입니다.
JVM은 그저 맹목적으로 해석하기만 하는 것이 아닙니다. JIT(just-in-time) 컴파일러가 어떤 코드가 가장 많이 실행되는지 지켜본 뒤, 그 핫 패스를 최적화된 네이티브 코드로 컴파일합니다. 그래서 오래 실행되는 자바 프로그램은 완전히 컴파일된 언어의 속도에 근접합니다.
정적 타입이며 객체 지향
두 가지 속성이 자바 코드의 모습과 느낌을 결정합니다.
정적 타입이란 모든 변수가 컴파일 시점에 알려진 타입을 가지며, 컴파일러가 프로그램이 실행되기도 전에 여러분의 타입을 검사한다는 뜻입니다.
count는 영원히 int입니다. 여기에 "hello"를 대입하면 컴파일되지 않습니다. 이는 처음에 더 많이 타이핑하는 대가로, 한 부류의 실수 전체를 일찍 잡아냅니다.
객체 지향이란 자바가 코드를 클래스로 정리한다는 뜻입니다. 클래스는 데이터와 그것에 작용하는 메서드를 한데 묶는 설계도입니다. 위의 진입점조차 class Main 안에 들어 있습니다. 자바에서 작성하는 거의 모든 것은 클래스 안에 존재합니다.
자바는 어디에 쓰이는가
자바는 세계에서 가장 널리 배포된 언어 중 하나입니다. 다음과 같은 곳에서 만날 수 있습니다.
- 백엔드 및 엔터프라이즈 시스템 - 은행, 보험, 대규모 웹 서비스, 그리고 수년간 안정적으로 돌아가야 하는 모든 것.
- 안드로이드 - 이 플랫폼의 본래 언어로, Kotlin과 나란히 쓰이는 지금도 여전히 안드로이드 런타임의 중심.
- 빅데이터 - Hadoop, Spark, Kafka, 그리고 데이터 엔지니어링 생태계의 상당 부분이 JVM 위에서 동작합니다.
- 데스크톱 및 임베디드 - IDE(IntelliJ, Eclipse)부터 POS 단말기, 스마트카드까지.
자바의 명성은 가장 간결한 언어라는 데 있다기보다는 안정성, 하위 호환성, 그리고 방대한 표준 라이브러리에 있습니다. 수년 전 자바용으로 작성된 코드는 대체로 오늘날에도 여전히 실행됩니다.
자바는 자바스크립트가 아니다
이름이 끝없는 혼란을 일으키기 때문에 분명히 짚어 둘 가치가 있습니다. 자바와 자바스크립트는 서로 다르고 관계없는 언어입니다. 둘은 역사적인 마케팅 이유로 네 글자를 공유할 뿐, 그 외에 중요한 공통점은 없습니다. 자바는 컴파일 언어이자 정적 타입이며 JVM에서 실행되고, 자바스크립트는 동적 타입이며 브라우저와 Node.js에서 실행됩니다. 하나를 배운다고 다른 하나를 배우게 되는 것은 아닙니다.
다음: 자바 설치하기
자신의 컴퓨터에서 자바를 작성하고 실행하려면 JDK(Java Development Kit)가 필요합니다. 이는 컴파일러에 JVM, 그리고 표준 라이브러리를 더한 것입니다. 다음 페이지에서는 그것을 설치하고 제대로 동작하는지 확인하는 과정을 차근차근 안내합니다.
자주 묻는 질문
자바는 어디에 사용되나요?
자바는 대규모 서버 측 및 엔터프라이즈 시스템, 안드로이드 앱(Android SDK와 Kotlin이 공유하는 런타임을 통해), Hadoop과 Spark 같은 빅데이터 도구, 그리고 수많은 데스크톱 및 임베디드 애플리케이션을 구동합니다. 자바의 강점은 안정성, 거대한 표준 라이브러리, 그리고 동일한 컴파일된 프로그램을 어떤 운영체제에서도 실행하는 JVM입니다.
자바는 컴파일 언어인가요, 인터프리터 언어인가요?
둘 다입니다. 자바 컴파일러(javac)는 소스 코드를 플랫폼에 독립적인 바이트코드로 바꾸고, JVM이 그 바이트코드를 실행합니다. 처음에는 인터프리터로 실행하다가, 자주 실행되는 경로(핫 패스)를 JIT(just-in-time) 컴파일러로 네이티브 머신 코드로 컴파일합니다. 즉, 자바는 바이트코드로 컴파일된 뒤, 실행 시점에 인터프리트되고 JIT로 컴파일됩니다.
자바는 자바스크립트와 같은 것인가요?
아니요. 역사적인 마케팅 이유로 이름만 공유하는, 서로 관계없는 언어입니다. 자바는 정적 타입의 컴파일 언어로 JVM에서 실행되고, 자바스크립트는 동적 타입 언어로 브라우저와 Node.js에서 실행됩니다. 하나를 안다고 해서 다른 하나를 아는 것은 아닙니다.