1강에서 개발 환경을 세팅했다면, 2강에서는 자바라는 언어 자체에 대해 좀 더 깊이 들여다봤다. 강의 내용과 함께 스스로 떠오른 궁금증들을 정리해 두려고 한다.
1. 프로그램의 시작점, main 메서드
자바 프로그램이 실행되면 JVM은 가장 먼저 main 메서드를 찾는다. 이전 포스팅에서도 잠깐 다뤘지만, 이번 강의에서 실행 흐름이 더 명확해졌다.
public class HelloJava {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
실행 순서를 간단히 정리하면 이렇다.
자바 실행 → main 메서드 탐색 → main 블록 내 코드를 위에서 아래로 한 줄씩 실행
참고로 psvm은 IntelliJ에서 public static void main(String[] args)를 자동완성해주는 라이브 템플릿 단축키다.
클래스와 파일명은 반드시 일치해야 한다
자바는 대소문자를 엄격히 구분한다. 그리고 한 가지 더, public class의 이름과 파일명이 반드시 같아야 한다.
HelloJava.java → public class HelloJava ✅
HelloJava.java → public class helloJava ❌ (컴파일 에러)
클래스의 시작과 끝은 {} 블록으로 나타내며, main 메서드도 마찬가지로 {} 안에 실행할 코드를 담는다.
2. 자바란? — 표준 스펙과 구현의 분리
자바를 이해하는 데 있어 "표준 스펙"과 "구현체"의 개념을 아는 것이 꽤 중요하다.
자바 표준 스펙
자바는 "이렇게 만들어야 한다"는 설계 문서(표준 스펙)가 먼저 존재한다. 이 스펙은 자바 커뮤니티 프로세스(JCP) 를 통해 관리되며, 어떤 회사든 자바를 구현하려면 이 스펙을 반드시 따라야 한다.
표준 스펙에서 정의하는 주요 구성 요소는 다음과 같다.
- 자바 컴파일러 — .java 파일을 .class 파일로 변환하는 규칙
- 자바 실행 라이브러리 — 자바 프로그램이 사용하는 표준 API
- 자바 가상 머신(JVM) — 바이트코드를 실제로 실행하는 가상 환경
다양한 자바 구현체
스펙을 기반으로 오라클, 아마존, Azul 등 여러 회사가 실제로 작동하는 자바를 직접 개발해 배포한다. 이들이 바로 JDK(Java Development Kit) 다.
배포판 제공사 특징
| OpenJDK | Oracle | 자바의 레퍼런스 구현체 |
| Amazon Corretto | Amazon | AWS 환경에 최적화 |
| Azul Zulu | Azul Systems | 장기 지원(LTS) 버전에 강점 |
핵심은, 어떤 배포판을 사용하든 같은 스펙을 따르기 때문에 코드가 동일하게 동작한다는 점이다. 실무에서 오라클 OpenJDK를 쓰다가 Amazon Corretto로 바꿔도 대부분 문제가 없는 이유가 바로 이것이다.
이 개념은 나중에 "어떤 JDK 버전, 어떤 배포판을 선택할 것인가"를 결정해야 하는 상황이 올 때 큰 도움이 된다.
3. 컴파일과 실행 — .java에서 실행까지
파이썬은 .py 파일을 곧바로 실행할 수 있지만, 자바는 컴파일이라는 단계가 중간에 하나 더 들어간다.
Hello.java → (javac 컴파일) → Hello.class → (java 실행) → 프로그램 동작
- javac Hello.java : 소스 코드를 JVM이 이해할 수 있는 바이트코드(.class)로 변환한다. 이 과정에서 문법 오류도 함께 검출한다.
- java Hello : 컴파일된 .class 파일을 JVM이 읽어 실행한다. (확장자 .class는 생략)
IntelliJ에서는 이 과정을 자동으로 처리한다
실행 버튼을 누르면 IntelliJ가 javac와 java 명령을 순서대로 대신 실행해준다. 1강에서 살펴봤던 out 폴더 안에 .class 파일이 생기는 것이 바로 컴파일의 결과물이다.
한 가지 눈여겨볼 점은, 컴파일된 .class 파일에는 소스 코드에서 작성했던 주석이 사라진다. 컴파일러가 최적화 과정에서 실행에 불필요한 정보를 제거하기 때문이다.
4. 자바와 운영체제 — "한 번 작성하면 어디서든 실행된다"
자바를 공부하다 보면 "OS 독립성" 이라는 표현을 자주 만나게 된다. 파이썬도 OS를 가리지 않는데 왜 자바만 유독 이를 강조하는지 궁금했다.
파이썬 vs 자바의 방식 차이
파이썬 자바
| 실행 방식 | 인터프리터가 코드를 직접 해석 | JVM이 바이트코드를 실행 |
| OS 독립성 구현 | 각 OS에 맞는 파이썬 인터프리터 설치 | 각 OS에 맞는 JVM 설치 |
둘 다 OS 독립적이지만, 방식이 다르다. 자바는 JVM이라는 별도의 추상화 계층을 통해 이를 구현한다.
왜 자바만 유독 강조하는가?
자바가 처음 등장한 1995년에는 프로그램이 특정 OS에 종속되는 것이 당연한 시대였다. 그 시절에 "JVM만 있으면 어디서든 동일하게 동작한다"는 Write Once, Run Anywhere(WORA) 철학을 내세웠고, 이것이 당시에는 혁명적인 개념이었기 때문에 지금까지도 자바의 상징처럼 언급된다.
5. 문자와 문자열 — ' vs " 는 완전히 다르다
파이썬에서는 'Hello'와 "Hello"를 구분 없이 사용하지만, 자바는 이 둘을 언어 명세(JLS) 수준에서 엄격하게 구분한다.
char String
| 분류 | 기본 자료형 (Primitive Type) | 참조형 (Reference Type / 클래스) |
| 표기 | 'A' (단일 따옴표) | "ABC" (쌍따옴표) |
| 저장 크기 | 2바이트 고정 | 내용에 따라 가변 |
| 빈 값 | 불가 (공백이라도 있어야 함) | 가능 ("" 허용) |
| JLS 근거 | §4.2.1, §3.10.4 | §3.10.5 |
왜 이게 중요한가?
따옴표를 잘못 쓰면 컴파일 오류가 발생한다. 예를 들어 아래 코드는 에러다.
char c = "A"; // ❌ Incompatible types — "A"는 String 객체로 인식됨
char c = 'A'; // ✅ 정상
"A"는 문자가 하나뿐이어도 자바 컴파일러는 이를 java.lang.String 객체로 인식하기 때문이다. 파이썬의 유연함에 익숙하다면 처음에 실수하기 쉬운 부분이니 주의가 필요하다.
한 줄로 정리하면 이렇다.
자바에서 '는 문자 하나, "는 문자열. 용도가 다르면 타입이 다르다.
2강을 정리하면서 자바가 왜 "엄격하다"는 말을 듣는지 조금씩 체감되기 시작했다. 타입 하나, 따옴표 하나도 정확히 맞춰야 컴파일이 통과된다. 번거롭게 느껴지기도 하지만, 그 덕분에 실행 전에 오류를 잡아낼 수 있다는 점은 큰 장점이다.
다음은 본격적으로 변수와 자료형을 다뤄볼 예정이다.
'Java' 카테고리의 다른 글
| Java 입문 1강 — 개발 환경 세팅하기 (0) | 2026.05.11 |
|---|






