자바가 등장하게 된 배경

Hansu Park·2023년 10월 19일
0

Java-Egg

목록 보기
1/1

자바가 어떤 배경하에 등장하게 되었는지, 또 기존 문제들을 해결하기 위해 어떠한 특성들을 지니고 있는지 살펴보자.

등장 배경

자바(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.

이를 해석해보면 자바는 다음과 같은 특징을 가지고 있다.

  • 범용성: 웹 개발, 어플 개발, 임베디드, 보안 등 다양한 분야에서 활용가능하다.
  • 동시성 지원: 멀티스레드, 동시성 제어 등 다양한 기능을 지원한다.
  • 강타입: 엄격한 타입체크를 기반으로 한다.
  • 클래스 기반 객체지향: 클래스 기반으로 객체지향을 지원한다.
    - 또 다른 객체지향 방식으로는 프로토타입 기반인 Javascript이 있다.

추가로, 다른 언어들과는 달리 JVM-Bytecode에 의해 번역되어 실행된다는 특징을 소개하고 있다.

또 다른 문서인 About the Java Technology (The Java™ Tutorials > Getting Started > The Java Technology Phenomenon)에서 소개하고 있는 또 다른 특징들은 아래와 같다.

  • 간단함: C/C++이 갖고 있는 저수준의 기능 제거
  • 분산형 지원: RMI, COBRA 등과 같이 분산환경에서도 통신 지원 (근래에 크게 사용하지는 않아 보인다.)
  • 동적: 동적으로 클래스 로딩 지원(클래스로더, 리플렉션)
  • 아키텍처 중립적: 가상 머신을 이용한 다양한 아키텍처에서 실행 가능
  • 휴대용: 가상 머신을 이용하여 다양한 플랫폼에서 실행 가능
  • 뛰어난 성능: JIT-핫스팟을 이용해 (과거에 비해 나아진) 빠른 성능 지원
  • 강건한: 예외처리, 자동 메모리 관리, 엄격한 타입검사 활용
  • 안전함: 다양한 보안 기능 제공

이들을 종합하여 어떻게 문제를 해결하고자 하였는지 짧게 정리해보면 다음과 같다.

  1. 메모리를 개발자가 직접 제어해야 한다는 점
    • Garbage Collector에 의한 메모리 제어
  2. 복잡성이 높아 개발자가 오류를 만들어내기 쉽다는 점
    • 순수한 객체지향 언어의 특성만을 지원
  3. 플랫폼에 따라 다른 결과를 출력할 수 있다는 점
    • 플랫폼 독립적으로 동작하기 위한 가상 머신위에서 동작

마지막으로, 세 가지 특성에 대해 좀 더 자세히 알아보자.

Garbage Collector

자바는 Garbage Collector에 의해 메모리를 자동으로 반납한다. 개발자가 메모리 반납이 아니라 비지니스 로직에만 집중할 수 있다.

객체지향 언어

자바는 클래스기반 객체지향 언어로 다른 언어들에 비해 최대한 객체지향의 원리에 가깝게 개발할 수 있다. 클래스와 인터페이스, 동적 로딩, 접근 권한, 컬렉션 등을 통해 지원한다.

플랫폼 독립적

WORA(Write-Once Run Anywhere)라고도 한다. 어떤 플랫폼에서든 실행가능하다. 플랫폼이라 함은 CPU 아키텍처와 운영체제 환경을 의미한다. CPU는 아키텍처에 따라 각자만의 ISA(Instruction Set Architecture)을 가지고 있고, 이에 따라 코드를 해석하는 방식이 다르다. 운영체제도 종류에 따라 각자만의 시스템 콜(운영체제에서 제공하는 기능들의 집합)을 가지고 있어, 이에 따라 사용할 수 있는 기능들이 다르다. 따라서, 다른 언어들은 이러한 플랫폼에 대응하기 위해 다양한 컴파일러를 제공하며 컴파일러에 따라 같은 코드임에도 다르게 동작하는 경우가 있다. 하지만, 자바는 운영채제-CPU가 아니라 가상머신이라는 소프트웨어 위에서 실행되기에 가상머신(JVM)만 잘 구축되어 있다면 똑같은 실행을 보장할 수 있다.

(C/C++의 해석 과정)

(Java의 해석 과정)

(워낙 중요한 내용이라, 추후 별도 파트로 다룰 계획이다.)

0개의 댓글