본문 바로가기
Computer Science/Java

[Java] 개요(등장배경/실행과정/특징/장단점)

by jeomn 2021. 12. 6.

1. Java

  가. Java 등장 배경

  1991년, 선마이크로시스템스의 제임스 고슬링을 중심으로 '그린 프로젝트'라는 이름으로 가전제품에 사용할 SW를 개발하기 시작했다. 가전제품은 매우 다양한 플랫폼을 가지고 있기 때문에 플랫폼에 독립적인 언어가 필요했고, 또 가전제품에 들어가는 제어 장치는 매우 적은 양의 메모리를 사용해야 하므로 내장형 시스템의 메모리 요구사항을 충족해야 했다. 선마이크로시스템스는 이 새로운 언어와 실행체계를 오크(oak)라 이름지었고, 이 오크를 인터넷 환경에 적합하도록 발전시켰다.

  1995년, SunWorld 95에서 자바(Java)라는 이름으로 새로운 언어를 발표하였고, 오라클 사에서 2009년 선마이크로시스템스를 인수하여 현재는 오라클에서 자바를 제공하고 있다.

 

  나. Java 컴파일과 실행

    ① 소스 프로그램 편집 및 개발(.java)

    ② 자바 컴파일러가 소스 파일을 컴파일하여 바이트 코드로 된 클래스 파일 생성(.class)

      - 바이트 코드, JVM에서 실행되는 기계어. 어떤 CPU와도 관계없는 바이너리 코드

    ③ 자바 가상 기계(JVM)가 인터프리터 방식으로 실행

      - 하나의 실행 파일로 묶는 링크 과정 없음

      - 클래스 파일을 메모리에 로딩하여 실행

      - 실행 도중 다른 클래스 파일이나 JDK 클래스 파일이 필요하면, JVM은 그 때 필요한 클래스 파일을 로딩(동적 로딩)하여 실행

      - 당장 실행할 클래스 파일만 로딩하여 실행할 수 있으므로, 적은 량의 메모리를 가진 CPU에서 큰 자바 응용 프로그램 실행 가능


2. Java의 특징

  • 플랫폼 독립성
    • WORA, Write Once Run Anyshere
    • 하드웨어, 운영체제 등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일됨
    • 자바 가상 머신(JVM)만 있으면 실행가능
    • 이식성이 높음
      • 자바 실행환경(JRE)이 설치되어 있는 모든 운영체제에서 실행 가능
  • 객체 지향성
    • OOP, 프로그램을 개발하는 기법으로 부품에 해당하는 객체를 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법
    • 완전한 객체지향 언어
      • 객체를 만들기 위해 설계도인 class를 작성하고, 객체와 객체를 연결해 목적에 맞는 프로그램을 만들어냄
    • 캡슐화, 상속, 다형성 지원
  • 멀티스레드 지원
    • 하나의 프로그램이 다수의 작업을 처리해야 하는 경우와 대용량 작업을 빨리 처리하기 위한 서브 작업 병렬 처리를위한 멀티스레드 환경 지원
    • 스레드 생성 및 제어와 관련한 라이브러리 API를 제공하고 있기 때문에, 실행되는 운영체제에 관계없이 멀티스레드 구현 가능
  • 가비지 컬렉션
    • 메모리를 할당받을 수는 있지만, 메모리를 반환하는 기능은 없음(개발자로 하여금 프로그래밍 부담을 줄여줌)
    • 자바 가상 기계의 가비지 컬렉션(Garbage Collection)이 프로그램 내에서 사용되지 않는 메모리(Garbage)를 자동으로 회수
  • 동적 로딩 지원
    • 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적로딩하여 객체를 생성
    • 적은 량의 메모리를 가진 CPU에서 큰 자바 응용 프로그램 실행 가능
    • 개발 완료 후 유지보수 시, 해당 클래스만 수정하면 되므로 전체 애플리케이션을 다시 컴파일할 필요가 없음
  • 다양한 애플리케이션 개발 가능
    • 콘솔 프로그램부터 클라이언트용 윈도우 애플리케이션, 서버용 웹 애플리케이션, 모바일용 안드로이드 앱 등 거의 모든 곳에서 실행되는 프로그램 개발 가능
  • 분산 프로그래밍 지원
    • 네트워크를 이용한 프로그래밍을 지원하고, 원격 접속을 위한 다양한 기술셋을 가지고 있음
  • 실시간 응용 시스템에 부적합
    • 실행 도중 예측할 수 없는 시점에 GC가 실행되므로 프로그램 실행이 일시적으로 중단됨
    • 일정 시간 내에 반드시 실행 결과를 내야만 하는 실시간 시스템에는 부적합
  • 안전
    • 타입 체크가 엄격하고, 메모리의 물리적 주소를 사용하는 포인터의 개념이 없음
    • 잘못된 프로그램으로 인하여 컴퓨터 시스템이 중단되는 일은 없음
  • 작성이 쉬움
    • 포인터의 개념이 없고, 개발을 도와주는 다양한 라이브러리가 있어 프로그램 작성이 빠르고 쉬움
  • JIT 컴파일러 사용
    • 자바 가상 기계가 인터프리터 방식으로 바이트 코드를 실행하므로 일반적으로 실행 속도가 느린 편
    • 최근에는 실행도중 자바 프로그램을 해당 CPU 기계어로 컴파일하고 CPU가 바로 기계어를 실행하는 JIT(Just In Time)컴파일링 기법을 이용하여 속도를 개선

3. Java의 장단점

  • 장점
    • 플랫폼 독립적
    • 객체지향언어
    • 멀티스레드
    • 다양한 오픈소스 라이브러리 > 개발 시간 및 비용 단축 가능
  • 단점
    • 실행 속도
      • 자바 가상 머신에 의해 기계어로 번역(바이트 코드)되고 인터프리터 방식으로 실행됨
      • 컴파일 후 기계어로 변환되어 실행되는 C/C++에 비하면 속도가 현저히 느림
      • JIT 컴파일링 방식을 사용하지만, 여전히 느림
    • 예외 처리
      • 프로그램 실행 중 발생할 수 있는 예외들을 개발자가 직접 처리해야 함
    • 하드웨어를 정밀하게 조정해야 하는 개발에는 부적합 < JVM을 이용하기 때문에 하드웨어 연결 제어 불가능

 

참고
황기대·김효수, 명품 Java Programing(개정 3판) ((주)생능출판사, 2017)

 

댓글