예를 들어, C/C++로 작성된 프로그램의 경우 컴파일 환경과 실행 환경이 맞지 않은 경우에는 실행되지 않는 문제가 있었다.
만약 Linux환경에서 컴파일을 해서 나온 실행파일을 윈도우에서 실행 시키면 돌아가지 않는 것이다.
- os마다 다른 system call, libraries가 존재하기 때문이다.
- cpu제조사마다 각각의 ISA(Instruction Set Architecture)가 존재하기 때문이다.
위와 같은 문제를 해결하기 위해 자바는 OS에 독립적인 특징을 가지게 된다.
바로 JVM(Java Virtual Machine)덕분에 가능하게 되는데, 자바의 컴파일 과정은 아래와 같다.
위 그림을 설명하자면,
- 우리가 작성한 소스코드(.java)는 컴파일 시, java compiler에 의해 자바 바이트 코드(.class)로 변환된다.
- 변환된 바이트코드는 런타임 시, JVM내에 class loader라는 곳에 전달되면서 기계어로 전환되고 실행한다.
- 이런 식으로 java가 java compiler에 의해 자바 바이트 코드로 변환되고 JVM내에서 기계어로 변환되기 때문에,
os에 맞는 JVM만 설치가 되어있다면 실행환경에 상관없이 어느 환경에서나 자바 바이트 코드가 JVM위에서 동작할 수 있게 되는 것이다.
(* JVM은 타겟 플랫폼에 의존하는 것은 어쩔 수 없지만.)
그렇다면 JVM이 어떤 구조로 되어 있기에 자바 바이트 코드를 실행까지 해주는 지에 대해 다음 글에서 정리할 예정이다.
'JAVA' 카테고리의 다른 글
4. Collections.sort()와 Arrays.sort() (0) | 2023.01.17 |
---|---|
3. 예외와 예외처리 (0) | 2022.12.15 |
22. 인터페이스 (0) | 2022.11.14 |
21. 추상 클래스, 추상 메서드 (0) | 2022.11.11 |
20. 다형성의 장점 (0) | 2022.11.10 |