자바를 처음 실행할 때 헷갈리는 것은 문법보다 코드를 작성한 파일이 어떤 과정을 거쳐 실행되는지다. 이 흐름을 이해하면 IDE에서 실행이 실패했을 때도 어디를 확인해야 할지 알 수 있다.
자바 소스 코드는 사람이 읽을 수 있는 .java 파일이다. 하지만 JVM은 이 소스 파일 자체가 아니라 컴파일된 바이트코드를 실행한다.
App.java ── javac(컴파일) ──> App.class(바이트코드)
│
▼
JVM에서 실행
│
▼
콘솔 출력 등 결과
javac, 실행 도구 java, 표준 라이브러리 등 개발에 필요한 도구 모음같은 바이트코드가 각 운영체제의 JVM에서 실행될 수 있다는 점이 자바의 이식성을 높인다. 다만 운영체제 종속 라이브러리나 파일 경로에 의존하는 코드는 그대로 이식되지 않을 수 있다.
2026년 10월 기준 Java 27은 최신 기능 릴리스이고, Java 25가 최신 LTS(장기 지원) 릴리스다. 학습 환경을 새로 만든다면 JDK 25 LTS를 고려할 수 있다. 조직의 프로젝트가 JDK 17 또는 21을 사용한다면 그 버전에 맞추는 것이 우선이다. 여기서 다루는 기본 코드는 Java 17 이상에서 실행할 수 있게 작성했다.
JDK는 Eclipse Temurin이나 OpenJDK 등의 배포판을 통해 설치할 수 있다. 배포판마다 업데이트 정책과 라이선스가 다를 수 있으니 업무용 도입 시 확인하자.
java -version
javac -version
두 명령어가 정상 실행되면 기본적인 개발 도구가 준비된 것이다. javac를 찾을 수 없다면 JDK 설치 여부와 PATH에 JDK의 bin 디렉터리가 등록되어 있는지 확인한다.
작업 폴더에 App.java 파일을 만든다.
// App.java
public class App {
public static void main(String[] args) {
String serviceName = "Order API";
int activeUsers = 12;
System.out.println(serviceName + " 접속 사용자: " + activeUsers);
}
}
javac App.java
java App
Order API 접속 사용자: 12
javac App.java가 성공하면 App.class가 생성된다. java App을 실행할 때는 .class 확장자를 붙이지 않는다.
최근 JDK에서는 간단한 단일 소스 파일을 java App.java 명령으로 직접 실행할 수도 있다. 이 방식도 내부적으로 소스 코드를 처리하며, 복잡한 프로젝트에서는 빌드 도구와 IDE를 주로 활용한다.
public: 외부에서 접근 가능한 메서드static: new App()으로 인스턴스를 만들지 않고 호출할 수 있음void: 반환값이 없음String[] args: 실행 시 전달한 문자열 인수의 배열System.out.println(...): 콘솔에 내용을 출력하고 줄을 바꿈위 선언은 여러 자바 버전에서 안정적으로 사용하는 전통적인 시작점이다. 최신 Java에는 더 간단한 진입점 문법도 있지만, 기존 프로젝트를 읽기 위해서는 이 형태를 알아 두는 것이 좋다.
파일에 최상위 public 클래스가 있다면 파일명은 그 클래스명과 정확히 일치해야 한다. public class App이면 App.java여야 한다. 이는 단순한 작명 관례가 아니라 자바 컴파일 규칙이다.
클래스는 관련 데이터와 메서드를 묶는 단위다. 메서드 안의 { ... }는 실행할 명령문을 묶는다. 일반적인 문장은 세미콜론(;)으로 끝난다.
int orderCount = 3; // 변수: lowerCamelCase
final int MAX_RETRY_COUNT = 5; // 상수: UPPER_SNAKE_CASE
클래스명은 OrderService처럼 UpperCamelCase, 메서드명은 calculateTotal()처럼 lowerCamelCase를 사용하는 것이 일반적이다. 식별자는 숫자로 시작할 수 없고 class와 같은 예약어를 쓸 수 없다.
주석은 // 한 줄 주석, /* 여러 줄 주석 */, 문서화용 /** Javadoc */을 구분한다. 무엇을 하는지가 코드에 드러난다면 주석에는 가급적 왜 그렇게 결정했는지를 적는 편이 유용하다.
| 오류 | 원인 및 확인할 점 |
|---|---|
javac: command not found | JDK 또는 PATH 설정 확인 |
Could not find or load main class | 실행 위치, 패키지, 클래스 경로(classpath) 확인 |
class App is public, should be declared in a file named App.java | 최상위 public 클래스와 파일명 불일치 |
UnsupportedClassVersionError | 컴파일에 사용한 Java 버전보다 실행 JVM이 오래되었을 가능성 |
IDE는 컴파일 및 실행 과정을 자동화해 준다. 그래도 처음에는 터미널에서 한 번 직접 실행해 보면 컴파일 오류와 실행 오류를 구분하기가 훨씬 수월해진다.
.java)는 컴파일되어 바이트코드(.class)가 된다.java -version과 javac -version으로 환경을 점검한다.javac App.java로 컴파일하고 java App으로 실행한다.public 클래스 이름과 .java 파일명은 같아야 한다.main, static, void, String[] args는 프로그램 시작점을 이해하는 핵심이다.