자바가 어떤 배경하에 등장하게 되었는지, 또 기존 문제들을 해결하기 위해 어떠한 특성들을 지니고 있는지 살펴보자.
자바(Java)라는 프로그래밍 언어에 대해 알아보자. 자바는 썬마이크로시스템즈에서 임베디드 시스템을 개발하기 위해 개발한 프로그래밍 언어이다. James Gosling과 Patrick Nauhton이 주도하였다. 당시 주로 사용되던 C/C++이 갖는 어려 문제점들을 극복하기 위해 개발하게 되었다.
C/C++의 문제점으로는
1. 메모리를 개발자가 직접 제어해야 한다는 점
2. 복잡성이 높아 개발자가 오류를 만들어내기 쉽다는 점
3. 플랫폼에 따라 다른 결과를 출력할 수 있다는 점
과 같은 문제점들이 있었다.
자바의 소개문서를 통해 이러한 문제점들을 어떻게 극복하였는지 살펴보자.
오라클에서 제공하는 Java Platform Overview
에서는 아래와 같이 소개하고 있다.
The Java Programming Language is a general-purpose, concurrent, strongly typed, class-based object-oriented language. It is normally compiled to the bytecode instruction set and binary format defined in the Java Virtual Machine Specification. For more information see Language Features.
이를 해석해보면 자바는 다음과 같은 특징을 가지고 있다.
추가로, 다른 언어들과는 달리 JVM-Bytecode에 의해 번역되어 실행된다는 특징을 소개하고 있다.
또 다른 문서인 About the Java Technology (The Java™ Tutorials > Getting Started > The Java Technology Phenomenon)에서 소개하고 있는 또 다른 특징들은 아래와 같다.
이들을 종합하여 어떻게 문제를 해결하고자 하였는지 짧게 정리해보면 다음과 같다.
마지막으로, 세 가지 특성에 대해 좀 더 자세히 알아보자.
자바는 Garbage Collector에 의해 메모리를 자동으로 반납한다. 개발자가 메모리 반납이 아니라 비지니스 로직에만 집중할 수 있다.
자바는 클래스기반 객체지향 언어로 다른 언어들에 비해 최대한 객체지향의 원리에 가깝게 개발할 수 있다. 클래스와 인터페이스, 동적 로딩, 접근 권한, 컬렉션 등을 통해 지원한다.
WORA(Write-Once Run Anywhere)라고도 한다. 어떤 플랫폼에서든 실행가능하다. 플랫폼이라 함은 CPU 아키텍처와 운영체제 환경을 의미한다. CPU는 아키텍처에 따라 각자만의 ISA(Instruction Set Architecture)을 가지고 있고, 이에 따라 코드를 해석하는 방식이 다르다. 운영체제도 종류에 따라 각자만의 시스템 콜(운영체제에서 제공하는 기능들의 집합)을 가지고 있어, 이에 따라 사용할 수 있는 기능들이 다르다. 따라서, 다른 언어들은 이러한 플랫폼에 대응하기 위해 다양한 컴파일러를 제공하며 컴파일러에 따라 같은 코드임에도 다르게 동작하는 경우가 있다. 하지만, 자바는 운영채제-CPU가 아니라 가상머신이라는 소프트웨어 위에서 실행되기에 가상머신(JVM)만 잘 구축되어 있다면 똑같은 실행을 보장할 수 있다.
(워낙 중요한 내용이라, 추후 별도 파트로 다룰 계획이다.)