🎃 3 min read or treat ! 🎃👻

JDK 21은 JEP 445: Unnamed Classes and Instance Main Methods(Preview)라는 스펙을 제공합니다. Preview Feature는 프로덕션에 사용을 삼가는 게 좋습니다.
이 스펙이 제공하는 것은 크게 두 항목으로 볼 수 있습니다.
void main() {}이고, non-static이라서 인스턴스 메인 함수로 부르는 것 같습니다.)🚧 Preview Features 🚧
프리뷰(Preview)가 붙으면 아직 시험적으로 제공하는 기능입니다. 보통 제거되는 편은 아닌데, 용법이나 실제 동작에서 추후 다른 형태를 제공할 수도 있기 때문에 큰 프로덕션에서는 삼가야 합니다. 그런데 사실 우리가 프로덕션에서 메인 함수를 아주 적극적으로 쓰는 편은 아니기 때문에, 이번 신택스는 조만간 입문자용으로 유용하게 쓰일 것 같습니다. 시대가 나중에도 자바를 요구하고 있다면요.
코드는 오나전 쉽습니다.
클래스를 사용할 때
package com.example.demo;
public final class ExampleUnnamed {
void main() { // << 얘만 간추릴 수도 있습니다.
System.out.println("해피 할로윈!!");
}
}
(파일 이름: ExampleUnnamed.java)
클래스까지 안 쓸 때
클래스 이름을 생략할 때는 패키지 선언부도 같이 삭제해야 합니다.
(파일 위치는 패키지 내부여도 됩니다.)
void main() {
System.out.println("해피 할로윈!!");
}
(파일 이름: ExampleUnnamed.java)
이렇게 컴파일을 하여 생성된 클래스 파일을 다시 디컴파일한 모습은 이렇습니다.

이 문장들에 주석을 달자면 이렇습니다.
코드를 다음처럼 작성하고, Main.java라는 파일에 작성했다고 하겠습니다.
void main() {
System.out.println("🎃 해피할로윈!! 🎃");
}
인텔리제이 버전에 따라 신택스 인식이 아직 안 될 수 있습니다. (글 작성 시점 기준 아래 참고)
다만 실행은 잘됩니다.

Run Configuration을 설정하러 갑시다. (보통 인텔리제이 화면 우상단)
- 좌상단
+버튼을 눌러서Applciation을 추가합니다.- 실행 클래스를 적는 칸에 파일 이름을 작성합니다. (제 경우엔
Main.java파일을 사용했습니다.)
이제 다음 항목을 참고하세요.
Modify Options를 열어 VM Options 입력란을 활성화합니다.VM Options를 입력란이 나타나면 그곳에 --enable-preview를 작성합니다.이 작업을 요약하면, 실행 클래스 이름을 작성할 때도 패키지 이름 없이 작성하고 파일에서도 패키지 선언부를 안 씁니다. 컴파일과 실행 때 사용할 VM Options는 --enable-preview를 포함해야 합니다.
이제 실행하면 다음처럼 콘솔창에 실행 모습을 확인할 수 있습니다.

만약 Main.java라는 파일을 작성했다고 하겠습니다.
void main() {
System.out.println("🎃 해피할로윈!! 🎃");
}
시스템 환경변수
PATH에JDK 21을 등록하였는지 확인하세요.시스템 환경변수
PATH에 bin 폴더를 등록해 두어야 이 PC의 어느 경로에서든 bin 폴더에 있는 프로그램을 쉽게 호출할 수 있습니다.java --version이 결과가 JDK 21이어야 합니다.
되어 있다면 다음 명령으로 컴파일합니다. (터미널 사용)
이 명령을 실행하는 경로에 Main.java 파일이 있어야 합니다.
(원하는 이름으로 만들면 됩니다.)
# 컴파일: 확장자를 포함한 파일 이름
javac --release 21 --enable-preview Main.java
--release 21을 작성해야 합니다.--enable-preview를 작성해야 합니다.참고로 --enable-preview는 프리뷰 기능을 활성화하는 옵션입니다.
# 실행: 확장자를 제외한 파일 이름
java --enable-preview Main
이제 터미널을 통해 결과를 볼 수 있습니다.

(캡처에서는 ExampleUnnamed.java라는 이름으로 파일을 작성하였음.)