Language/Java

[Java] 자바 개요 - 정의, 역사, 실행 과정 (feat. 자바 가상 머신)

재은초 2024. 4. 3. 17:53
반응형

자바(Java)란?

  • 자바(Java)는 C언어에 객체 지향적 기능을 추가하여 만든 C++과는 달리, 처음부터 객체 지향 언어로 개발된 프로그래밍 언어다.
  • 자바는 자바 가상 머신(JVM, Java Virtual Machine)을 사용하여, 운영체제와는 독립적으로 동작할 수 있다. 따라서 자바는 어느 운영체제에서나 같은 형태로 실행될 수 있다.

 

자바의 역사

  • 처음에 자바는 가전제품 내에서 동작하는 임베디드 프로그램을 위한 언어로 썬 마이크로시스템즈(Sun Microsystems)사의 제임스 고슬링(James Gosling) 팀에 의해 개발되었다.
  • 1991년에 오크(Oak)라는 이름으로 시작하여, 1996년에 발표된 1.0.2 버전부터 자바(Java)라는 이름을 사용하게 되었다.
  • 썬 마이크로시스템즈사는 1997년에 ISO/IEC에서 표준화 절차를 밟았으나 성사되지 못한다. 이후 자바는 자발적 표준(de facto)으로써 자바 커뮤니티 프로세스(Java Community Process)를 통해 관리된다.
  • 1998년 발표된 J2SE 1.2에서는 웹에서도 자바를 돌릴 수 있게 해 주는 자바 애플릿(Java Applet)이 추가되며, 자바의 인기는 급상승하게 된다.
  • 2007년에 썬 마이크로시스템즈사는 자바의 코어 부분을 대부분 GPL 라이선스로 오픈한다.
  • 2009년에 썬 마이크로시스템즈사가 오라클과 인수 합병됨에 따라 자바에 대한 권리 및 유지보수 또한 현재는 오라클에서 수행하고 있다.

 

자바 프로그래밍의 실행 과정

https://www.tcpschool.com/java/java_intro_programming

자바 컴파일러(Java compiler)

  • 자바 컴파일러(Java compiler)는 자바를 가지고 작성한 자바 소스 코드를 자바 가상 머신이 이해할 수 있는 자바 바이트 코드로 변환한다.
  • 자바 컴파일러는 자바를 설치하면 javac.exe라는 실행 파일 형태로 설치된다.

자바 바이트 코드(Java bytecode)

  • 자바 바이트 코드(Java bytecode)란 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미한다.
  • 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있다.
  • 자바 바이트 코드의 확장자는 .class입니다.
  • 자바 바이트 코드는 자바 가상 머신만 설치되어 있으면, 어떤 운영체제에서라도 실행될 수 있습니다.

자바 가상 머신(JVM)

  • 자바 가상 머신(JVM, Java Virtual Machine)이란 자바 바이트 코드를 실행시키기 위한 가상의 기계다.
  • 자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있으므로, 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 한다.
  • 서로 다른 운영체제라도 자바 가상 머신만 설치되어 있다면, 같은 자바 프로그램이 아무런 추가 조치 없이 동작할 수 있다. 따라서 개발자는 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있는 장점이 있다. 단, 자바 프로그램과는 달리 자바 가상 머신(JVM)은 운영체제에 종속적이므로, 각 운영체제에 맞는 자바 가상 머신을 설치해야 한다. 또한, 자바 프로그램은 일반 프로그램보다 자바 가상 머신이라는 한 단계를 더 거쳐야 하므로, 상대적으로 실행 속도가 느리다는 단점을 가지고 있다.
  • 자바 가상 머신의 구성
    1. 자바 인터프리터(interpreter): 자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는 것이 자바 인터프리터(interpreter)다.
    2. 클래스 로더(class loader): 자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결된다. 이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 바로 클래스 로더(class loader)다.
    3. JIT 컴파일러(Just-In-Time compiler): JIT 컴파일러(Just-In-Time compiler)란 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러를 의미한다. 동적 번역(dynamic translation)이라고도 불리는 이 기법은 프로그램의 실행 속도를 향상시키기 위해 개발되었다. 즉, JIT 컴파일러는 자바 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는 데 사용한다.
    4. 가비지 컬렉터(garbage collector): 자바 가상 머신은 가비지 컬렉터(garbage collector)를 이용하여 더는 사용하지 않는 메모리를 자동으로 회수해 준다. 따라서 개발자가 따로 메모리를 관리하지 않아도 되므로, 더욱 손쉽게 프로그래밍을 할 수 있도록 도와준다.

 

Reference

반응형