자바는 표준 스펙과 구현으로 나눌 수 있다
- 자바 표준 스펙
- 자바는 이렇게 만들어야 한다는 설계도
- 이 표준 스펙을 기반으로 여러 회사에서 실제 작동하는 자바를 만듦
- 자바 표준 스펙은 자바 커뮤니티 프로세스(JCP)를 통해 관리됨
- 다양한 자바 구현
- 여러 회사에서 자바 표준 스펙에 맞추어 실제 작동하는 자바 프로그램을 개발함
- 각각 장단점이 있음. ex. Amazon Corretto는 AWS에 최적화 되어 있음
- 각 회사들은 대부분 윈도우, MAC, 리눅스 같이 다양한 OS에서 작동하는 버전의 자바도 함께 제공함
다양한 자바 구현에 대해서는 아래 사이트를 참고한다.
Java 애플리케이션을 빌드하고 실행하려면 Java 플랫폼과 표준 스펙(Java SE)을 구현하는 Java 컴파일러, 런타임 라이브러리 및 Java 가상 머신(JVM)이 필요하다. OpenJDK는 Java SE 스펙의 오픈 소스 참조 구현이지만 그저 소스코드일 뿐이다. 여러 OS와 같은 플랫폼을 지원하는 바이너리 형태의 배포판들은 각기다른 벤더(vendor)로부터 제공된다. 이러한 배포판들은 라이선스, 상업적 지원, 지원 플랫폼, 업데이트 주기 등이 다르다. 이 사이트는 독립적이면서도 주관적인 추천을 제공한다.
자바 구현들은 모두 표준 스펙에 맞도록 개발되어 있다. 따라서 오라클 Open JDK를 사용하다가 Amazon Coretto 자바로 변경해도 대부분 문제 없이 동작한다.
컴파일과 실행
자바 프로그램은 컴파일과 실행 단계를 거친다.
- 자바 컴파일러를 사용해 소스 코드를 컴파일 한다.
- 자바가 제공하는 javac라는 프로그램을 사용한다
- .java -> .class 파일이 생성된다
- 자바 소스 코드를 바이트코드로 변환하며 JVM에서 더 빠르게 실행될 수 있게 최적화하고 문법 오류도 검출한다
- 자바 프로그램을 실행한다
- 자바가 제공하는 java라는 프로그램을 사용한다
- JVM이 실행되면서 프로그램이 작동한다.
바이트코드 : JVM이 해할 수 있는 언어로 변환된 자바 소스 코드, 자바 컴파일러로 변환되는 코드의 명령어 크기가 1바이트라서 바이트코드라 불린다. 즉, 자바는 OS에 종속적이지 않기 위해 JVM이 이해할 수 있는 언어인 바이트코드 형태로 제공되고 바이트코드와 JVM이 있으면 어느 운영체제에 종속적이지 않고 실행된다고 이해하면 된다.
IDE와 자바
IntelliJ는 내부에 자바를 편리하게 설치하고 관리할 수 있는 기능을 제공한다.
이 기능을 사용하면 인텔리제이를 통해 자바를 편리하게 다운로드 받고 실행할 수 있다.
참고로, OS에 직접 자바를 설치해도 되지만, 과정이 번거롭고 환경 설정이 복잡하다.
(ㅇㅈ jenv 깔아서 버전 관리하고 경로 설정하고 등등 번거로웠음 ..ㅎㅎ)
IntelliJ를 통한 자바 컴파일, 실행 과정
1. 컴파일
- 인텔리제이는 javac 프로그램을 실행하는 과정을 자바 코드를 실행할 때 자동으로 처리해 준다. (ex. javac Hello.java)
- 인텔리제이 화면에서 프로젝트에 있는 out 폴더에 가보면 컴파일된 .class 파일이 있는 것을 확인할 수 있다
2. 실행
- 자바를 실행하려면 java라는 프로그램을 사용해야 하고, 이때 컴파일된 .class 파일을 지정해주면 된다. (ex. java Hello / 확장자는 제외)
인텔리제이에서 자바 코드를 실행하면 컴파일과 실행 모두 한번에 처리한다. 인텔리제이 덕분에 매우 편리하게 자바 프로그램을 개발하고 학습할 수 있다.
자바와 OS 독립성
일반적인 프로그램은 다른 운영체제에서 실행할 수 없다. .exe의 윈도우 프로그램은 MAC이나 리눅스에서 작동하지 않는다. 왜냐하면 윈도우 프로그램은 윈도우 OS가 사용하는 명령어들로 구성되어 있기 때문이다. 해당 명령어는 다른 OS와는 호환되지 않는다.
반면에 자바 프로그램은 설치된 모든 OS에서 실행할 수 있다. 따라서 자바 개발자는 특정 OS에 맞추어 개발을 하지 않아도 된다. 자바 개발자는 자바에 맞추어 개발하면 된다. OS 호환성 문제는 자바가 해결한다. Hello.class와 같이 컴파일된 자바 파일은 모든 자바 환경에서 실행할 수 있다. 윈도우 자바는 윈도우 OS가 사용하는 명령어들로 구성되어 있다. MAC이나 리눅스 자바도 본인의 OS가 사용하는 명령어들로 구성되어 있다. 개발자는 각 OS에 맞도록 자바를 설치하기만 하면 된다.
개발할 때 자바와 서버에서 실행할 때 다른 자바를 사용할 수 있다. 개발자들은 개발의 편의를 위해서 윈도우나 MAC OS를 주로 사용한다. 서버는 주로 리눅스를 사용한다. 만약 AWS를 사용한다면 Amazon Corretto 자바를 AWS 리눅스 서ㅓ에 설치하면 된다. 자바의 운영체제 독립성 덕분에 각각의 환경에 맞추어 자바를 설치하는 것이 가능하다.
'PS > Java' 카테고리의 다른 글
[ JAVA ] 자바 입문 - 변수 (0) | 2025.07.07 |
---|---|
[ JAVA ] 기본 문법 - 메서드 (0) | 2024.10.19 |
[ JAVA ] 기본 문법 - 배열 (0) | 2024.10.19 |
[ JAVA ] 기본 문법 - Scanner (0) | 2024.10.19 |
[ JAVA ] 기본 문법 - 스코프(변수의 접근 가능한 범위), 형변환 (0) | 2024.10.19 |