본문 바로가기

Java프로그래밍

객체기반SW설계 2차시: Java platform independency

반응형


Platform Independency

플랫폼 독립성.

굉장히 멋진 단어들이다.

내용은,

앞 차시에 설명했던 대로,

Java언어로 짜고, 빌드한 실행프로그램은

운영체제에 상관없이 돌아갈 수 있다는 것이다.


Platform-dependent language C:

반면에,

C언어 프로그램은 운영체제와 상관있다.

그래서,

멋진 말로 표현하자면,

C언어는 platform dependent하다고 한다.


Java 소스코드의 확장자: .java

프로그래밍 언어별로

고유의 확장자가 있다.

C언어 확장자는 .c

C++언어 확장자는 .cpp

요즘 한참 뜨고 있는 Python언어 확장자는 .py

이렇듯이

Java언어의 확장자는 .java 이다. 확장자치곤 좀 길다.


Java 빌드의 결과: 바이트 코드

Java 소스코드를 빌드하면

가상머신이 수행할 수 있는 코드가 생성되는데,

이것을 바이트코드라 하고, 아래처럼 생겼다.



바이트코드의 확장자: .class

소스코드를 빌드해서 나온 바이트코드는 

새로운 확장자를 갖게 되는데,

이것이 .class이다.

즉, hello.java 소스코드를 빌드하면,

hello.class 바이트코드가 나오게 된다.

그러면 이 바이트코드를

가상머신이 실행하게 되는 것이다. 


정리: Java 실행프로그램의 생성 순서

1. Java 소스코드를 작성한다. 이 때 확장자는 .java가 된다.

아래 그림과 같이 HelloWorld.java와 같은 소스코드가 

만들어진다.

2. 빌드를 하기 위해서, Java Compiler(컴파일러)를 이용한다.

컴파일러는 소스코드를 바이트코드로 변환시킨다.

생성되는 바이트코드의 확장자는 .class이다.

3. 마지막으로, 생성된 바이트코드는 가상머신 (JVM)위에서 실행된다.


바이트코드 생성의 진실

좀 더 자세한 내용을 들여다 보자.

바이트코드가 생성되는 과정에서

단순히 컴파일러를 사용하는 것은 아니다.

Java의 platform independency를 보장하는 것은

공짜로 얻는 것이 아니다.

이를 위해서 가상머신을 사용하는 것은 물론,

컴파일러도 운영체제별로 별도로 있다.

아래 그림에서 

컴파일러는 javac.exe 프로그램이지만,

각 운영체제, HW별로 다 다르다.

따라서, Java 프로그램을 작성하는 운영체제와 HW에 따라

별도의 컴파일러를 설치해서 사용해야 한다.

정리하자면,

Java 소스코드와 바이트코드는 platform independenct하다.

그러나,

컴파일러는 platform dependent하다.

또한,

가상머신도 patform dependent하다.

아래 그림에서 java.exe로 표시된 것이 가상머신이고,

그림에는 Java interpreter라고 표시되어 있다.

Interpreter라는 것은 사전적인 의미로 '통역자'인데,

바이트코드를 실제 '통역'해서 컴퓨터가

실행하도록 하는 것이다.

사실, Java interpreter가 가상머신을 구동시키는 구조로 되어 있다. 



바이트코드의 진실

만약 바이트코드에 대해서 좀 더 알고 싶다면,

아래 그림을 보자.

왼쪽은 Java코드로 작성한 것이고,

오른쪽은 이에 해당하는 바이트코드이다. 

그러면 중간은 무엇인가?

이건 바이트코드를 사람이 볼 수 있는 형태로

line-by-line으로

바꾸어 놓은 것이다.

이런 과정을 '역어셈블' (disassemble)이라고 한다. 

왜? 

이런 것이 필요할 때가 있다. 특히 디버깅할 때.


짧은 Java 소스코드지만,

바이트코드로 바꾸면, 

아주 간단한 명령들의 긴 순서로 바뀌는 것을 볼 수 있다.

사실, 컴퓨터는 아주 간단한 일들만 빠르게 할 수 있다.

그러므로, 복잡한 일을 시키려면,

간단한 일들을 조합해서 시켜야 하는 것이다.




Java 컴파일러와 인터프리터, 가상머신의 설치

Java 프로그램을 개발해서 실행해 보려면,

대충 감 잡았듯이,

컴파일러, 인터프리터, 그리고 가상머신을 먼저 설치해야 한다.

그것도 운영체제에 따라 각각 다른 것을..

그런데, 굿뉴스가 있다,

이 모든 것이 무료이고,

한 방에 다운로드 할 수 있다는 것이다.

컴파일러+인터프리터+가상머신, 이 세 개의 종합세트를

Java Development Kit (JDK)라고 하고,

이것에 대해서는 다음 차시에서 배운다.


Java언어의 patform independency에 대해서 설명합니다.



반응형