"JAVA"란 무엇인가??

이도원·2022년 9월 29일
3
post-thumbnail

전세계의 많은 백엔드 개발자가 선택하는 언어인 JAVA 현재 필자도 사용중인 언어는 JAVA이다. 오늘은 JAVA 대해 알아보도록 하겠다.

☕ JAVA란??

JAVA는 1991년 썬 마이크로시스템즈(Sun Microsystems)사에서 제임스 고슬링(James Gosling)이 고안하였고 오크(Oak) 혹은 그린(Green)으로 불렸다.
오크(Oak)는 원래 가전제품에서 쓰일 프로그램 개발이 목적이었지만, 인터넷과 웹이 나타남으로 인해 오크는 가전제품에서 인터넷이 목적으로 바뀌게 되었고, 이후 1995년 이름을 JAVA로 변경하게 되었다.

▲ 썬 마이크로시스템즈 로고

다른 종류의 컴퓨터 운영체제(OS)에서 작성된 프로그램은 다른 OS에서 돌아가지 않자 JAVA는 각각의 OS에서 프로그램을 동작할 수 있도록 가상머신(JVM)을 만들어 이를 해결하게 되었고, 썬 마이크로시스템즈에서 1996년 JAVA1.0을 처음 공개했다.

JAVA는 무료 런타임을 제공했고, 주요 웹 브라우저들은 웹페이지에서 자바 애플릿(Java Applet)을 실행 가능하게 통합하게 되면서, JAVA는 인기를 얻고 대중화되었다.

▲James Gosling(제임스 고슬링)

👍 JAVA의 장점

JAVA는 8가지 정도의 특징을 가지고 있다.

  • 1. 자바는 호환성이 높다.

    • 서로 다른 OS에서도 JAVA는 JVM(가상머신) 위에서 구동되기 때문에 OS의 종류에 상관없이 실행된다.
    • JAVA는 자바 실행환경(JRE)이 설치 되어 있는 모든 OS에서 실행가능하다.
  • 2. 객체지향 프로그래밍 (OOP)

    • 개체지향 프로그래밍(OOP: Object Oriented Programming)이란 하나의 기능을 객체로 만들고, 이러한 객체들을 결합해서 하나의 프로그램을 만드는 것을 말한다.
    • 객체지향 언어의 특징인 상속성, 캡슐화, 다향성을 완벽하게 지원한다.
  • 3. 인터프린터 언어이다.

    • 인터프린터 언어인 동시에 컴파일 언어이다.
    • 소스를 컴파일해서 2진파일인 클래스를 만든다음 JAVA 런타임이 클래스 파일을 인터프린트 하면서 실행한다.
    • 시스템과 상관없는 2진 파일을 만듦으로써 JAVA는 컴파일 언어와 가까운 속도를 갖고, 시스템과의 독립성을 얻을수 있다.
  • 4. 메모리를 자동으로 관리한다.

    • JAVA는 개발자가 직접 메모리에 접근할 수 없도록 설계되었으며, 메모리는 JAVA가 직접 관리하게 된다.
    • 객체 생성 시 자동으로 메모리 영역을 찾아서 할당하고,사용 완료 시 Garbage Collector를 실행해 자동적으로 사용하지 않는 객체를 제거한다. (개발자는 메모리 관리의 수고를 덜고 코딩에 집중할 수 있다.)
  • 5. 멀티 스레드 구현이 용이하다.

    • OS에 따라 멀티스레드를 구현하는 API가 다르나, JAVA의 경우 JAVA API를 이용하기 때문에 OS에 관계 없이 멀티스레드를 쉽게 구현 가능하다.
  • 6. 동적 로딩을 지원한다.

    • JAVA는 실행될 때 모든 클래스가 로딩되는것이 아닌, 필요한 시점에 클래스를 로딩하여 사용한다.
    • 개발 완료 후 유지보수를 할 떄 해당 클래스만 수정하면 되기 때문에, 전체 애플리케이션을 다시 컴파일할 필요가 없다.
  • 7. 분산환경을 지원한다.

    • JAVA는 기본적으로 TCP/IP 라이브러리가 포함되어 있고, http와 htp 프로토콜을 기본적으로 지원한다.
  • 8. 오픈소스 라이브러리가 풍부하다.

    • JAVA는 오픈소스 언어이고, 전 세계에서 만들어진 라이브러리들이 매우 많다.

때문에 자바로 개발된 프로그램은 시스템에 상관없이 JVM만 설치할 수 있으면 실행이 가능했고, 이러한 점이 웹 애플리케이션의 특성과 맞아 떨어져 인기를 얻게 되었다.

👎 JAVA의 단점

이번엔 JAVA의 단점을 알아보도록 하겠다.

  • 1. 실행 속도가 느리다.

    • JAVA는 실행할 때 JVM(가상머신)을 거치기 때문에, 다른 언어에 비해 실행 속도가 느리다.
  • 2. 불편한 예외처리

    • 예외 처리가 잘 되어 있지만, 개발자가 일일이 예외를 처리를 지정해 줘야 한다는 불편함이 있다.
  • 3. 소스 길이가 길다.

    • 다른 언어에 비해 작성해야 하는 코드가 긴 편이다.

이로써 JAVA의 장점 및 단점을 알아보았다.

🏃 JAVA 프로그램 실행과정

JAVA 언어로 프로그래밍된 파일을 JAVA컴파일러가 가상 기계어 파일인 class파일로 만든다. 즉, 소스코드는 JAVA 바이트코드로 변환되고, JAVA 바이트코드인 class파일을 JVM이 읽고 실행하는 것이다.

▲JAVA 프로그램 실행과정

🎛️ "JVM"이란?

JVM은 Java Virtual Machine의 줄임말로 OS마다 따로 코드를 작성해야하는 번거로움 없이 JAVA가 플랫폼에 독립적으로 만들어준다.

즉, JVM은 JAVA 클래스 파일을 로드하고 바이트 코드로 해석하며, 메모리 등의 자원을 할당하고 관리해 정보를 처리하는 프로그램이다.

▲JVM 구조

  • Class Loader
    JVM내로 .class파일들을 로드한다. 로딩된 클래스들을 Runtime Data Area에 배치한다.
  • Execution Engine
    로딩된 클래스의 바이트코드를 해석한다. 이 과정에서 바이트코드가 바이너리코드로 변경된다.
  • Garbage Collector
    그림에서는 언급되지 않았지만 Garbage Collector는 Heap메모리 영역에 생성된 객체들 중 참조되지 않는 객체들을 탐색해 제거한다.
  • Runtime Data Area
    JVM의 메모리 영역으로 JAVA 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다. 저장 목적에 따라 5개로 나뉜다.
    • Method Area
      모든 스레드에게 공유된다. 클래스 정보, 변수 정보, 메소드 정보, static변수 정보, 상수 정보 등이 저장되는 영역
    • Heap Area
      모든 스레드에게 공유된다. new 명령어로 생성된 인스턴스와 객체가 저장되는 구역, 공간이 부족해지면 Garbage Collection이 실행된다.
    • Stack Area
      각 스레드마다 하나씩 생성된다. 메서드안에서 사용되는 값들(매개변수, 지역변수, 리턴 값 등)이 저장되는 구역, 메서드가 호출될 때 LIFO로 하나씩 생성되고, 메서드 실행이 완료되면 LIFO로 하나씩 지워진다.
    • PC Register
      각 스레드마다 하나씩 생성된다. CPU의 Register와 역할이 비슷하다. 현재 수행 중인 JVM명령의 주소 값이 저장된다.
    • Native Method Stack
      각 스레드마다 하나씩 생성된다. 다른 언어(C/C++ 등)의 메서드 호출을 위해 할당되는 구역 언어에 맞게 Stack이 형성되는 구역이다. JNI(Java Native Interface)라는 표준 규약을 제공한다.

여기까지 JAVA애 대해 정리를 하고 마무리하고자 한다.

참고 사이트

https://ko.wikipedia.org/wiki/%EC%8D%AC_%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%A6%88
▲썬 마이크로시스템즈

https://namu.wiki/w/Java/%EB%B2%84%EC%A0%84#s-2
▲JAVA 버전

https://namu.wiki/w/Java
▲JAVA

profile
자바 풀스택 3년차 개발자 입니다. 부족한 부분은 많이 채워나가도록 하겠습니다.

0개의 댓글