# Valhalla·Python·Withers·Lombok, JavaOne '25에서 건축가에게 직접 묻다

---

# # 📌 서론 – “왜 이런 질문을 해야 할까?”

2025년 **JavaOne** 컨퍼런스가 열리면서, 개발자 커뮤니티는 새로운 언어 기능과 툴에 대한 궁금증으로 떠들썩합니다.

특히 **Project Valhalla**, 파이썬과의 연동, **Withers** 메서드, 그리고 **Lombok** 같은 코드 자동화 도구는 “우리 프로젝트에 실제로 어떤 도움이 될까?”라는 질문을 불러일으키죠.

이 글에서는 JavaOne '25에서 발표된 주요 주제들을 초보자도 이해하기 쉽도록 정리하고, 실제 현업에 적용할 수 있는 팁을 제공하겠습니다.

> **핵심 키워드**: `JavaOne 2025`, `Project Valhalla`, `Lombok`

---

# # 🧩 본문

## # 1️⃣ Project Valhalla – 값 타입(Value Types)의 미래

**Valhalla**는 자바 플랫폼에 **값 타입**을 도입해 메모리 효율과 성능을 크게 향상시키려는 프로젝트입니다.

| 특징 | 설명 |

|------|------|

| **값 타입** | 객체와 달리 힙이 아닌 스택에 저장돼 가비지 컬렉션 부담이 적음 |

| **인라인화** | 기본형처럼 메서드 호출 없이 바로 사용 가능 |

| **호환성** | 기존 클래스와 인터페이스와 호환되도록 설계 |

> **초보자 팁**: 현재는 **preview** 단계이므로, `--enable-preview` 옵션과 JDK 21 이상을 사용해 실험해보세요. 작은 프로젝트에 적용해 메모리 사용량 변화를 직접 확인하는 것이 좋은 연습이 됩니다.

---

## # 2️⃣ Python과의 연동 – Jython vs GraalVM

Java와 Python을 동시에 쓰고 싶다면 두 가지 접근법이 있습니다.

1. **Jython**

   - 순수 Java 구현 Python 인터프리터

   - 최신 Python 3.x 지원이 아직 미흡

2. **GraalVM**

   - 다중 언어 런타임으로 Java와 Python을 같은 VM에서 실행

   - **Polyglot API**를 통해 두 언어 간 객체를 자유롭게 주고받음

**GraalVM**이 현재 가장 활발히 사용되고 있으며, 특히 **JavaOne '25**에서 발표된 새로운 **Python‑to‑Java interop** 기능은 기존 JNI보다 훨씬 간편합니다.

> **초보자 팁**: GraalVM Community Edition을 설치하고 `--polyglot` 플래그로 실행하면, `python.exec('print('Hello from Python')')`와 같은 간단한 코드로 실험할 수 있습니다.

---

## # 3️⃣ Withers 메서드 – 불변 객체(Immutable) 만들기의 핵심

**Withers**는 객체의 특정 필드만 변경하고 싶을 때, 새로운 인스턴스를 반환하는 메서드 패턴을 말합니다.

```
java

public User withName(String name) {

    return new User(name, this.age);

}

```

- **불변성 보장** → 멀티스레드 환경에서도 안전

- **가독성 향상** → 체이닝 방식으로 직관적인 코드 작성

Java 21부터는 **record**와 결합해 `with` 메서드 자동 생성이 가능해졌습니다.

> **초보자 팁**: 기존 POJO에 `with` 메서드를 직접 구현하기 번거롭다면, **Lombok**의 `@With` 어노테이션을 활용해 자동 생성해 보세요.

---

## # 4️⃣ Lombok – 보일러플레이트 코드를 한 방에 없애다

**Lombok**은 반복적인 getter/setter, 생성자, `toString` 등을 어노테이션 하나로 자동 생성해 주는 라이브러리입니다.

| 주요 어노테이션 | 역할 |

|----------------|------|

| `@Getter/@Setter` | 자동 getter/setter 생성 |

| `@AllArgsConstructor` | 모든 필드 포함 생성자 |

| `@Builder` | 빌더 패턴 구현 |

| `@With` | **Withers** 메서드 자동 생성 |

**JavaOne '25**에서는 Lombok이 **Java 21 record**와도 호환된다는 발표가 있었습니다. 즉, `record` 선언에 `@Builder`를 붙여 빌더 패턴을 그대로 사용할 수 있습니다.

> **초보자 팁**: Maven/Gradle에 `lombok` 의존성을 추가하고 IDE 플러그인을 설치하면, 코드 작성 시 실시간으로 자동 완성 기능을 체험할 수 있습니다.

---

## # 5️⃣ 실전 적용 사례 – 작은 프로젝트에 모두 적용해 보기

| 단계 | 적용 내용 |

|------|-----------|

| 1️⃣ 프로젝트 초기 | `Project Valhalla` preview 기능 활성화 (JDK 21) |

| 2️⃣ 데이터 모델 | `record` + `@With` 로 불변 객체 설계 |

| 3️⃣ 외부 연동 | GraalVM으로 Python 스크립트 호출 |

| 4️⃣ 코드 간소화 | Lombok `@Builder`와 `@With` 활용 |

| 5️⃣ 테스트 | JUnit5와 `@ValueSource`로 값 타입 테스트 |

위 흐름을 따라가면, **성능**·**가독성**·**유연성**을 동시에 잡을 수 있습니다.

---

# # 🎯 결론 – 지금 바로 시작해 보세요!

- **JavaOne '25**에서 공개된 최신 기능들을 직접 체험해 보면, 기존 프로젝트에서도 즉시 적용 가능한 아이디어를 얻을 수 있습니다.

- **Project Valhalla**와 **record** 기반 불변 객체 설계는 메모리 사용량을 크게 줄여줍니다.

- **GraalVM**을 활용하면 Python 스크립트를 Java 애플리케이션에 매끄럽게 녹여낼 수 있습니다.

- **Lombok**과 **Withers** 메서드로 코드를 깔끔하게 정리하면 유지보수 비용이 감소합니다.

> **행동 유도**: 오늘 당장 `pom.xml`에 Lombok을 추가하고, JDK 21 preview 옵션으로 간단한 **값 타입** 예제를 실행해 보세요. 그리고 GraalVM을 설치해 Python 연동 실험을 진행한다면, 여러분의 개발 역량은 한 단계 업그레이드됩니다!

---

*이 글이 도움이 되었다면, 댓글과 공유를 통해 더 많은 개발자와 정보를 나눠 주세요.* 🚀
