1. 자바 표준 스펙
자바 표준 스펙과 구현
자바는 표준 스펙과 구현으로 나눌 수 있다.
- 자바 표준 스펙은 자바를 이렇게 만들어야 한다는 설계도이자 문서이며, 자바 커뮤니티 프로세스(JCP)를 통해 관리한다.
- 여러 회사에서 자바 표준 스펙에 맞추어 실제 작동하는 자바 프로그램을 만든다.
- 회사마다 각각 장단점이 있다. 예를 들어 Amazon Corretto는 AWS에 최적화되어 있다.
- 각 회사들은 대부분 윈도우, MAC, 리눅스 같이 다양한 OS에서 작동하는 버전의 자바도 함께 제공한다.
참고
다양한 자바 구현에 대해서는 다음 사이트를 참고하자.
변경의 용이
자바 구현들은 모두 자바 표준 스펙에 맞도록 개발돼 있다. 따라서 오라클 Open JDK를 사용하다가 Adoptium Eclipse Temurin 자바나 Amazon Corretto 자바로 변경해도 대부분 문제없이 작동한다.
2. 컴파일과 실행
자바 프로그램은 컴파일(javac)과 실행(java) 단계를 거친다.
- Hello.java와 같은 자바 소스 코드를 개발자가 작성한다.
- 자바 컴파일러(javac)를 사용해서 소스 코드를 컴파일한다.
- 자바가 제공하는 javac라는 프로그램을 사용한다.
- .java 파일이 .class 파일로 컴파일된다.
- 자바 소스 코드를 바이트코드로 변환하며, 자바 가상 머신(JVM)에서 더 빠르게 실행될 수 있도록 최적화하고 문법 오류도 검출한다.
- 자바 프로그램을 실행(java)한다.
- 자바가 제공하는 java라는 프로그램을 사용한다.
- 자바 가상 머신(JVM)이 실행되면서 프로그램이 작동한다.
3. IDE와 자바
인텔리제이를 통한 자바 설치 관리
인텔리제이는 내부에 자바를 편리하게 설치하고 관리할 수 있는 기능을 제공한다. 이 기능을 사용하면 인텔리제이를 통해 자바를 편리하게 다운로드하고 실행할 수 있다.
인텔리제이를 통한 자바 컴파일 및 실행 과정
위에 설명한 단계와 동일하지만, 자바 컴파일과 실행을 인텔리제이가 대신해서 처리한다는 점에서 차이가 있다.
- 인텔리제이에서 자바 코드를 실행하면 컴파일과 실행을 모두 한 번에 처리한다. 덕분에 매우 편리하게 자바 프로그램을 개발하고 학습할 수 있다.
- 자바 소스 코드 컴파일
- 자바 코드를 컴파일하려면 javac라는 프로그램을 직접 사용해야 하지만, 인텔리제이는 자바 코드를 실행할 때 이 과정을 자동으로 처리해 준다.
- ex. javac Hello.java
- 인텔리제이 화면에서 프로젝트에 있는 out 폴더에 가보면 컴파일된 .class 파일이 있는 것을 확인할 수 있다.
- 자바 코드를 컴파일하려면 javac라는 프로그램을 직접 사용해야 하지만, 인텔리제이는 자바 코드를 실행할 때 이 과정을 자동으로 처리해 준다.
- 자바 프로그램 실행
- 자바를 실행하려면 java라는 프로그램을 사용해야 한다. 이때 컴파일된 .class 파일을 지정해 주면 된다. 참고로 확장자는 제외한다.
- ex. java Hello
- 자바를 실행하려면 java라는 프로그램을 사용해야 한다. 이때 컴파일된 .class 파일을 지정해 주면 된다. 참고로 확장자는 제외한다.
4. 자바와 운영체제 독립성
일반적인 프로그램
일반적인 프로그램은 다른 운영체제에서 실행할 수 없다.
- 예를 들어 윈도우 프로그램은 윈도우 OS가 사용하는 명령어로 구성돼 있기 때문에 해당 명령어는 다른 OS와 호환되지 않는다. 따라서 MAC이나 리눅스에서 작동하지 않는다.
자바 프로그램
그와 달리 자바 프로그램은 자바가 설치된 모든 OS에서 실행할 수 있다. 따라서 자바 개발자는 특정 OS에 맞춰 개발하지 않고, 자바에만 맞춰 개발하면 된다.
- OS 호환성 문제는 자바가 알아서 해결한다. Hello.class와 같이 컴파일된 자바 파일은 모든 자바 환경에서 실행할 수 있다.
- ex. 윈도우 자바는 윈도우 OS가 사용하는 명령어로 구성돼 있다. MAC이나 리눅스 자바도 본인의 OS가 사용하는 명령어들로 구성돼 있다. 개발자는 각 OS에 맞도록 자바를 설치하기만 하면 된다.
자바 개발과 운영 환경
아래 그림처럼 대부분의 개발자들은 개발의 편의를 위해 윈도우나 MAC OS를 주로 사용하고, 서버는 주로 리눅스를 사용한다. 따라서 개발할 때와 서버에서 실행할 때 다른 자바를 사용하게 될 수도 있다. 이때 자바의 운영체제 독립성 덕분에 각각의 환경에 맞춰 자바를 설치하는 것이 가능하다.
- ex. 서버를 AWS로 사용한다면 Amazon Corretto 자바를 AWS 리눅스 서버에 설치하면 된다.