Java - JDK,JRE,JVM - 자바를 많이 쓰는 이유 (자바가 C보다 느린이유)

컴퓨터/Java

728x90
반응형

Java 기반 프로그래밍

시대가 급변하고 많은 프로그래밍 언어들이 등장하면서 Java를 배워야 되는가에 의문점을 가지고 있는 사람들이 많을 것입니다. 개인적인 생각으로는 모든 프로그래밍 언어를 숙련되어 능숙하게 사용하기에는 엄청난 시간과 노력이 필요할 것이고 하나의 언어만 배운 사람들의 숙련도에서 차이가 심할 겁니다. 그럼에도 배우는 기준에서는 다양한 언어들을 접해보기를 추천합니다. 계속해서 프로그래밍 언어들이 생겨나는 이유는 다른 언어들의 단점을 극복하거나, 조금 더 편리하게 사용하기 위해서입니다. 이러한 단점, 차이, 편리한 점을 몸소 느끼기 위해서는 다양한 언어에 대한 경험이 필요하다고 생각합니다. 특히나 Java의 경우 아직 현역의 언어임이 틀림없으면서 다양한 언어들의 기본 형태의 뿌리와 같은 개념이기 때문에 더욱더 알아두시길 권장합니다.

 

Java 프로그래밍 구조

먼저 C언어나 C++에 대해서 공부하셨다면 작성한 소스코드가 어떠한 번역기(컴파일러)에 의해 완성된 프로그램으로 탄생한다는 것을 알고 계실것 입니다. Java 또한 소스코드가 어떠한 번역기에 의해 완성된 프로그램이 되는 것은 변함이 없습니다. 하지만 이 과정에서 사용자들에게 다양한 편의성을 제공하기 위한 기능들이 있습니다.

 

이런 기능과 과정들을 모여서 Java 언어로 만드는 프로그래밍 과정이 되는 것 입니다. 이 과정들을 구조를 나누자면 아래와 같습니다.

 

  • JDK
  • JRE
  • JVM

JDK(Java Development Kit) - 개발 환경의 모든 것

Java 언어를 이용해서 프로그래밍을 하기 위해서는 필수적으로 필요한 것이 바로 이 JDK 입니다. 위의 도표와 같이 JDK는 Java언어를 이용해서 프로그래밍부터 실제 프로그램의 구동까지 모든 것을 포함한 환경입니다. JDK에서 Java언어로 작성된 소스코드를 컴파일을 해주어 JRE로 넘어가게 됩니다. C언어 같은 경우 컴파일을 하면 완성된 프로그램이 되지만 자바언어의 같은 경우 JDK환경에서 컴파일을하게되면 .class라는 확장자를 가진 JVM에서 동작할 수 있는 특수한 형태로 컴파일이 됩니다.

 

JRE(Java Runtime Environment)

JRE에는 이미 JVM에서 원할하게 동작할 수 있는 컴파일이 완료된 파일들 즉, 라이브러리 등의 요소들이 이미. class란 파일로 보관되어 있는 환경이라고 생각합니다. 

따라서 JDK환경 위에서 프로그래머는 Java언어를 이용한 소스코드를 작성하고 컴파일을 하게되어 JVM에서 구동하기 위한 컴파일된 파일들을 효율적으로 사용하기 위한 공간입니다.

 

JVM(Java Virtual Machine)

흔히 자바 가상머신이라고 많이 부르는 이 영역이 바로 Java언어 구조의 가장 큰 특징이자 장점이고 단점입니다.

JDK 환경에서 소스코드를 컴파일하면 실행파일이아닌 .class파일이 생긴다고 했습니다. 이. class파일을 통해서 프로그램을 구동하게 해주는 영역이 바로 이 JVM이라는 영역입니다. 따라서 Java 프로그램을 개발하고 JVM을 개발하는 사람들이 운영체제와 맞는 JVM개발이 필요하게 되고, Java언어를 이용하여 프로그래밍을 하는 프로그래머들은 어떠한 운영체제 환경에서도 JVM이라는 영역만 있다면 Java언어로 만든 프로그램이 구동 가능하게 됩니다.

C언어의 경우 각각의 운영체제에 맞게 컴파일이 필요했다면, Java언어는 그런 단점을 극복할수 있게 됩니다.

또한 이 영역에서 가비지 컬렉션(Garbage Collection)이라는 메모리를 효율적으로 관리하기 위한 프로세스 또한 있습니다. 추후에 좀 더 자세히 다루겠지만 이러한 가비지 컬렉션을 이용해서 프로그래머들이 소스코드상에서 만든 프로그램의 메모리를 모두 컨트롤해야 하는 상황을 최소화시켜줄 수 있습니다.

 

자바언어를 많이 쓰는 이유와 그리고 C언어보다 느린 이유

C언어나 C++을 공부해보고 이 글을 보시면 왜 느린지 확연하게 알 수 있습니다.

결국 C언어와 Java언어를 비교하자면 큰 특징이 몇 개 있습니다.

 

  • C언어는 컴파일을 통해 하나의 운영체제에 맞는 프로그램으로 작성된다.
    • 각 운영체제마다 컴파일이 필요하다. 
  • Java언어로 작성한 프로그램은 JVM이라는 자바 가상머신 안에서 구동된다.
    • JVM을 위한 컴파일 하나만 필요하다.
    • Java언어기반 프로그램을 구동하려먼 JVM환경이 사용하는 운영체제에 있어야 한다.
  • C언어는 프로그램의 메모리 관리를 프로그래머가 전담한다.
  • Java언어는 가비지 컬렉션을 이용해서 JVM안에서 메모리 관리를 도와준다.

위의 내용을 보면 C언어를 통하여 프로그래밍을 하면 각각의 운영체제에 최적화된 프로그램을 제공하며, 효율적인 메모리 관리를 위해 프로그래머가 많은 신경을 써야 됩니다. 즉, 동일한 프로그램을 만들려고 한다면 프로그래머에게 부담되는 업무의 양은 많아 질 것입니다. 하지만 완성된 프로그램은 운영체제와 최대한 최적화가 되어있고 운영체제가 직접 제어할수 있는 프로그램이기 때문에 빠른 프로그램 구동 속도를 보장합니다.

Java언어를 사용한다면 JVM안에서 구동하기 때문에 단 한번의 컴파일을 통해 다양한 운영체제 환경에서 동작하는 프로그램을 만들 수 있습니다. 이 말은 프로그램의 규모가 거대해서 컴파일이 오래 걸린다던가, 자주 프로그램을 개선해서 업그레이드하는 경우 단 한번의 컴파일로 JVM이 구동되는 모든 운영체제 환경에서 구동하는 프로그램을 만들 수 있다는 것입니다. 하지만 운영체제가 JVM을 구동하고 JVM이 Java로 만든 프로그램을 구동하는 환경이기 때문에 절대적으로 동일한 기능을 구현한다면 C언어보다 느릴 수밖에 없는 것입니다. 

오늘날 이것을 일반 사용자들이 체감하기는 프로그램의 특성에 따라 다르겠지만, 보통은 체감하기 쉽지 않습니다. 그렇기 때문에 프로그래머들을 Java언어를 사용한 프로그래밍을 하는 이유 중 하나입니다. 속도보다, 거대한 규모의 프로그래밍을 하기 위해서 들어가는 시간이 훨씬 더 효율적이기 때문입니다.

728x90
반응형

'컴퓨터 > Java' 카테고리의 다른 글

Java - 추상화 클래스  (0) 2021.08.15
Java - Get/Set 함수에 익숙해지자  (0) 2021.08.13
Java - 클래스 배열  (0) 2021.08.08
Java - Package(패키지)  (0) 2021.08.04
Java - 모든 클래스는 Object 클래스를 상속 받는다.  (0) 2021.07.28

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :