Java

Write Once, Run Anywhere.

썬 마이크로시스템즈가 발표한 자바의 가장 대표적이자 유구한 역사적 슬로건.

대한민국 IT 생태계를 지탱하는 거대한 뿌리이자, 국비지원 학원과 전자정부 프레임워크의 영원한 동반자. 그리고 수많은 컴퓨터공학과 전공생들을 객체지향의 지옥으로 밀어 넣은 장본인

1. 개요

Java는 1995년 썬 마이크로시스템즈(Sun Microsystems)의 제임스 고슬링(James Gosling)이 개발한 객체지향 프로그래밍 언어이다. 현재는 오라클사에서 라이선스를 쥐고 있으며, 전 세계 백엔드 및 모바일(안드로이드) 시장에서 막강한 점유율을 차지하고 있다.

특히 한국에서는 사실상 국가 표준 언어 대접을 받고 있는데, 국가 기관 및 대기업의 백엔드 시스템 대부분이 자바 기반의 Spring Framework로 이루어져 있기 때문이다. 이 때문에 대한민국에서 개발자로 밥 벌어먹고 살려면 싫어도 피해 갈 수 없는, 그야말로 인생 동반자 같은 언어이기도 하다.(...)

2. 특징

2.1. JVM(Java Virtual Machine)과 이식성

자바의 가장 큰 아이덴티티는 "한 번 작성하면 어디서든 돌아간다(Write Once, Run Anywhere)"이다. 자바 코드는 운영체제(OS)가 바로 실행할 수 있는 기계어가 아닌, 가상 머신용 중간 코드인 바이트코드(Bytecode)로 컴파일된다. 이를 JVM이 실행 시점에 각 OS에 맞는 기계어로 번역(JIT 컴파일)하기 때문에, 윈도우에서 짠 코드를 리눅스나 맥에서도 아무런 수정 없이 그대로 돌릴 수 있는 엄청난 범용성을 얻게 되었다.

다만 가상 머신을 거쳐 실행되는 특성 때문에 실행 초기 속도가 다소 느리고 메모리 점유율이 높다는 고질병이 있다. 특히 메모리를 자동으로 관리해 주는 가비지 컬렉션(Garbage Collection, GC)이 돌 때 시스템이 일시적으로 멈추는 현상(Stop-The-World)은 자바 백엔드 엔지니어들의 영원한 튜닝 난제 중 하나다.1

2.2. 지나치게 보수적인 객체지향과 장황함

자바는 "모든 것은 클래스다"라는 신념 아래 설계되었다. 이 때문에 단순한 Hello World 한 줄을 출력하기 위해서도 무조건 클래스를 선언하고, public static void main(String[] args)라는 장황한 진입 메서드를 작성해야만 한다.

또한 객체지향의 캡슐화를 철저히 준수하기 위해 멤버 변수마다 gettersetter 메서드를 수십 개씩 도배해야 하는데, 이로 인해 코드의 총 길이가 사정없이 길어진다. 최근 버전에서는 Lombok 라이브러리나 record 문법 도입으로 사정이 좀 나아졌지만, 여전히 다른 현대 언어들에 비해 코드가 숨 막히도록 빽빽하다는 평가를 받는다. 타이핑 속도가 빠른 개발자가 자바를 잘한다는 농담이 있을 정도다

3. 관련 밈 및 드립

3.1. 전자정부 프레임워크(Spring)

대한민국 국비지원 코딩 학원의 90% 이상이 자바와 스프링을 가르치고, 공공기관 시스템은 전자정부 프레임워크(eGovFrame)를 필수로 사용하도록 규정되어 있어 생긴 밈이다. 코딩 커뮤니티에서는 무조건 자바와 스프링만 강요하는 한국 IT 생태계를 풍자하며 "기-승-전-자바스프링"이라는 드립을 치거나, "자바를 모르면 한국에서는 개발자가 아니라 잡부 취급을 받는다"는 식의 자조적인 이야기가 정설처럼 떠돌아다닌다.

3.2. 지나치게 장황한 네이밍

자바 및 스프링 생태계 특유의 장황한 클래스 작명법을 비꼬는 밈이다. 디자인 패턴을 철저하게 따르다 보니 클래스 이름 뒤에 Manager, Factory, Proxy, Bean, Wrapper, Implementation 등이 줄줄이 비엔나소시지처럼 붙어, 클래스 이름 하나가 30자를 훌쩍 넘는 경우가 흔하다. 실제로 스프링 내부에는 AbstractSingletonProxyFactoryBean 같은 괴랄한 이름의 클래스가 버젓이 존재하며, 이는 개발자들에게 "과도한 객체지향은 뇌를 절이게 만든다"는 교훈을 안겨주는 대표적 사례로 꼽힌다.(...)

4. 여담

  • 자바의 상징적인 로고: 자바의 공식 로고에 그려진 컵은 인도네시아 자바 섬산 커피(Java Coffee)에서 유래했다. 개발자인 제임스 고슬링과 동료들이 사무실 근처에서 엄청나게 마셔대던 자바 커피에서 이름을 따왔기 때문이다.
  • 오라클 인수와 OpenJDK 망명: 오라클이 자바의 상표권을 인수한 이후 JDK 라이선스 유료화 정책을 펼치면서, 기업들은 오라클에 라이선스 비용을 내지 않기 위해 오픈소스인 OpenJDK 기반의 다양한 커스텀 배포판(Adoptium, Amazon Corretto 등)으로 망명을 시도하는 눈물겨운 피난길에 올랐다.
  • 백전노장 Java 8과 11: 자바의 버전 숫자는 1.0부터 시작해서 1.4까지 가다가 갑자기 5.0(내부적으로는 1.5)으로 점프했고, 현재는 6개월마다 메이저 업데이트를 출시하는 폭주 기관차가 되었다. 하지만 실무에서는 여전히 2014년에 나온 Java 8과 2018년에 나온 Java 11이 백전노장처럼 현역으로 굴러가고 있다.2

5. 관련 문서

각주

  1. GC가 불필요한 메모리를 정리할 때, JVM이 애플리케이션 실행을 완전히 멈추고 빗자루질을 하는 것을 의미한다. 이 찰나의 순간에 API 응답 지연이 발생해 금융권이나 게임사 서버 개발자들의 명줄을 깎아 먹는다.

  2. 신기능이 가득한 Java 21이 나왔음에도 불구하고, 대기업 인프라나 레거시 시스템은 "굳이 잘 돌아가는 서버를 건드려 긁어 부스럼을 만들지 않는다"는 절대 법치주의에 의해 Java 8에 영원히 박제되어 있다.