WORA는 write once run anywhere의 약자로
한 번 쓰고, 모든 곳에서 실행한다
라는 원칙을 가지고 있습니다.
자바의 WORA원칙을 설명할 때 가장 쉽게 비교되는 것이 C언어입니다.
C언어로 작성된 프로그램은 실행되는 OS환경에 종속적이라고 할 수 있습니다.
과거에는 다양한 OS가 존재함에 따라, 기존의 방식대로라면 모든 OS에 맞는 프로그램을 각각 개발해야했습니다. 비슷한 코드를 반복적으로 작성해야하는 문제를 해결하고자 Java가 등장했습니다.
자바는 JVM
과 byte code
를 이용하여 실행되기 때문에, 플랫폼(OS)이나 HW와 상관없이 실행될 수 있도록 하였습니다.
이러한 java의 특징을 WORA라고 하며, 한번 코드를 작성하면, 어떤 환경에서도 동작한다는 것을 의미합니다.
자바 가상 머신이라고 부르며, 자바 바이트 코드를 실행시키기 위한 가상의 기계라고 생각할 수 있습니다.
자바는 JVM환경 위에서만 동작할 수 있으며, 어떤 운영체제인지와는 상관 없이 JVM이 설치되어 있다면 언제든지 실행될 수 있습니다. 반면에 JVM의 경우, 각 운영체제에 맞는 JVM을 설치해야 합니다.
출처 : https://tcpschool.com/java/java_intro_programming
.java
형식의 java파일을 작성한다.byte code
로 이루어져있는 .clss
파일로 변환한다..class
파일은 기계어가 아닌 JVM이 이해할 수 있는 형식)동적 로딩
을 통해 필요한 클래스를 런타임 데이터 영역(JVM의 메모리)에 올린다.byte code
를 인터프리터 방식과 JIT 컴파일러 방식을 통해 기계어로 변환되며, 실행된다.)** JIT 컴파일러 방식이란?
just-in-time 컴파일의 약자입니다.
인터프리터 방식을 사용하는 언어에서 실행속도를 향상시키기 위해 고안된 컴파일러 방식입니다.
많은 코드를 인터프리터 방식으로 실행하게되면 실행 속도가 매우 느려지기 때문에, 같은 코드를 매번 해석하는 대신 처음 실행될 때 인터프리트를 하면서 자주 쓰이는 코드를 캐싱한뒤,
이후에는 캐싱된 코드를 가져다 사용하며, 인터프리터의 느린 실행속도를 보완할 수 있다는 장점이 있습니다.
반면에 초기 구동 시에는 소스코드를 실행하는 단계에서 컴파일하는데 시간과 메모리를 소모하기 때문에 정적 컴파일된 프로그램에 비해서 실행속도면에서 손해본다는 단점이 있습니다.
출처: https://velog.io/@fe1/JDK-JRE-JVM
이 셋의 관계는 다음과 같이 나타낼 수 있다
JDK는 java프로그램을 개발하기 위해 필요한 도구 모음입니다. JDK는 JRE를 포함하고 있으며, JRE는 JVM을 포함하고 있습니다.
JDK안에는 자바를 개발할 때 필요한 라이브러리와 javac, javadoc등의 개발 도구를 포함하고 있으며, 앞서 언급했듯이 자바 프로그램을 실행시키기 위한 JRE를 포함하고 있습니다.
JVM과 자바 프로그램을 실행시킬 때 필요한 라이브러리 API를 함께 묶어서 배포하는 패키지입니다. JRE에는 자바 클래스 라이브러리, 자바 클래스 로더, 자바 가상머신이 포함됩니다. 추가적으로 자바 런타임 환경에서 사용하는 프로퍼티 셋팅과 리소스 파일을 가지고 있습니다.
개발 관련 도구를 포함하지 않기 때문에 JRE만 가지고는 자바파일을 컴파일 할 수는 없습니다.
자바 프로그램을 컴파일하여 만들어진 바이트 코드를 실행해주는 가상 머신을 의미합니다.
자바는 프로그램의 수정없이 어떠한 운영체제에서도 동일한 형태로 실행 가능함을 보장합니다. 자세한 설명은 상단의 JVM part를 참조해주시면 됩니다.
https://ar-tec.tistory.com/802
https://t0pli.tistory.com/51
https://www.itworld.co.kr/news/110768
https://tcpschool.com/java/java_intro_programming