1. 자바란 무엇인가?
자바는 절차적 언어인 C언어에 객체 지향적 기능을 추가하여 만든 C++과는 달리,
처음부터 객체 지향 언어로 개발된 프로그래밍 언어입니다.
자바는 자바 가상 머신(JVM, Java Virtual Machine)을 사용하기 때문에,
운영체제와는 독립적으로 동작할 수 있습니다.
따라서 자바는 어느 운영체제에서나 같은 형태로 실행될 수 있습니다.
2. 자바의 역사
- 초기 : 임베디드 프로그램을 위한 언어로 썬 마이크로시스템즈(Sun Microsystems)사의 제임스 고슬링(James Gosling) 팀에 의해 개발
- 1991년에 오크(Oak)라는 이름으로 시작하여, 1996년에 발표된 1.0.2 버전부터 자바(Java)라는 이름을 사용
- 1998년 발표된 J2SE 1.2에서는 웹에서도 자바를 돌릴 수 있게 해 주는 자바 애플릿(Java Applet)이 추가
- 2009년에 썬 마이크로시스템즈사가 오라클과 인수 합병됨에 따라 자바 또한 오라클로 소유권 이전
3. 자바의 특징
3 - 1. 장점
- 풍부한 라이브러리로 쉽게 개발이 가능하고 배우기 쉽습니다.
- 운영체제와 독립적으로 실행이 가능합니다. (Write Once, Run Anywhere(WORA) 원칙)
- 자동 메모리 관리를 지원하여 다른 언어에 비해 안정성이 높습니다 (가비지 컬렉션)
- 멀티 쓰레드를 지원 합니다.
- 연산자 오버로딩을 금지하고 제네릭을 도입함으로써 코드의 가독성을 높였습니다.
3 - 2. 단점
- 실행을 위해 자바 가상 머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느립니다.
- 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해줘야 한다는 불편함이 있습니다.
- 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편입니다.
4. 자바 가상 머신 (JVM)
4 - 1. 자바 가상 머신(JVM, Java Virtual Machine)이란?
자바 가상 머신이란 자바 바이트 코드를 실행시키기 위한 가상의 기계라고 할 수 있습니다.
(자바 바이트 코드 - 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드)
자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있으므로,
자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 합니다.
아래의 그림처럼 서로 다른 운영체제라도 자바 가상 머신만 설치되어 있다면,
같은 자바 프로그램이 아무런 추가 조치 없이 동작할 수 있습니다.
따라서 개발자는 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있는 장점이 있습니다.
단, 자바 프로그램과는 달리 자바 가상 머신(JVM)은 운영체제에 종속적이므로, 각 운영체제에 맞는 자바 가상 머신을 설치해야 합니다.
4 - 2. 자바 가상 머신 구성
- 자바 인터프리터(interpreter) : 자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는 것입니다.
- 클래스 로더(class loader) : 자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결됩니다. 이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 바로 클래스 로더(class loader)입니다.
- JIT 컴파일러(Just-In-Time compiler) : 자바 바이트 코드를 기계어인 Native Code로 변환 시킵니다.
- 가비지 컬렉션(garbage collection)
5. 가비지 컬렉션(garbage collection)
C언어나 C++같은 언어에서는 필요한 메모리 공간을 라이브러리를통해 운영체제로부터 할당받아 사용하다가 다 쓰면 다시 해제해서 운영체제로 반환해야 합니다.
개발자가 관리하지않는다면 메모리 공간을 할당받기만하고 반환하지 않아 프로세스가 점점 커지다가 운영체제에 의해 시그널을 맞고 죽게됩니다. 이러한 버그를 “메모리 릭(Memort Leak)” 이라고 합니다.
자바의 경우 JVM을 통해 메모리를 할당받아 더 이상 사용되지 않는 메모리 공간은 JVM이 알아서 회수한 다음 해제해주는 데 이러한 동작을 “가비지 컬렉션(Garbage Collection)”이라고 합니다.