JAVA, JDK/JRE/JVM

7024 단어 JavajdkJREJVMJRE

JAVA

자바는 썬 마이크로시스템즈의 제임스 고슬링과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다.

현재까지도 현업에서 가장많이 사용되는 객체 지향 언어이다. 이형이 개발에 참여했다.

...행복해보인다.
뭐 접어두고 JAVA의 특징에 대해 알아보자


JAVA의 특징

  1. 객체 지향 프로그래밍(OOP) 언어이다.
    객체를 생성하고 그 객체로 프로세스를 수행하며 완성하는 프로그래밍 기법을 사용한다.

  2. 멀티쓰레딩을 지원한다.
    JAVA는 스레드 생성 및 제어 API가 포함되어 스레드를 쉽게 구현할 수 있다.

  3. 이식성이 높다.
    JAVA는 JVM 위에서 구동되기 때문에 OS와 운영체제의 제약이 없다.

  4. 메모리를 자동으로 관리한다.
    C/C++의 경우 객체에 할당된 메모리를 초기화해줘야하지만 JAVA는 객체 생성시 자동으로 메모리를 할당하고 GarbageCollector가 주기적으로 사용하지 않는 객체를 제거한다.

  5. 동적 로딩을 지원한다.
    실행시 모든 class를 로딩하는 것이 아니라 필요한 시점에 class를 로딩해 사용한다.

  6. 분산 네트워크 기술을 지원한다.
    JAVA는 기본적으로 TCP/IP API가 포함되어 있고 http와 htp 프로토콜을 지원한다.

OOP (Object-Oriented Programming, 객체 지향 프로그래밍)

객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

절차 지향의 언어는 코드의 순서대로 해석해 스택을 쌓아가며 완성하는 프로그래밍 기법이라면 객체 지향 언어는 개발자가 설계도를 만들고 그 설계도로 만들어진 객체들을 전달하고 설정하며 완성하는 프로그래밍 기법이다.

예를 들어 애플을 예로 들어보자.

public class iPhone7 {
    private String phoneNumber;
    private String appleId;
    ...
    
    public void setNumber (String i_phoneNumber) {
        this.phoneNumber = i_phoneNumber;
    }
    
    public String getNumber () {
        return this.phoneNumber;
    }
    
    ...
}

이와 같은 아이폰7 설계도(class)가 있다 치자

iPhone7 carrotsPhone = new iPhone7();
iPhone7 durianPhone = new iPhone7();

carrotsPhone.setNumber("010-1111-2222");
durianPhone.setNumber("010-2222-4444");

해당 아이폰 설계도를 통해 carrotsPhonedurianPhone을 만들었다.
각 아이폰에는 카메라 찎는 기능, 전화거는 기능, 페이스 타임등 같은 기능을 포함하고 있다.
그렇다고 carrotsPhonedurianPhone이 같은 핸드폰인가?

carrotsdurian은 같은 종류의 아이폰을 구매했지만 이후 각자의 전화번호를 설정했다. 설계도를 통해 핸드폰을 만들고 각 핸드폰마다 저장되는 데이터가 다르다.

위의 예제가 객체 지향 프로그래밍의 핵심이다.
특정 기능을 수행하는 설계도를 만들고, 그 설계도를 사용해 객체를 생성한다.
같은 설계도를 사용했더라도 각 객체는 서로 다른 속성을 지닌다. 각 객체는 설계도에 정의된 기능을 수행하고 전달한다. 모든 작업은 객체단위로 수행되며, 이런 일련과정을 통해 프로그램을 완성해 나간다, 그것이 객체 지향 프로그래밍이다.


JDK, JRE, JVM

대충 이런 구조를 갖고있다.

1. JDK (Java Development kit)

JAVA 플랫폼의 등장 이래 지금까지 가장 널리 사용되는 소프트웨어 개발 키트다.

쉽게 말해 우리가 JAVA 코딩을 하기 위해 필요한 개발 킷이다. 기본적으로 변수 선언할때 String, int, boolean 등등 이런 것들이 포함되어있다. JAVA 코드를 보면 상단에

import java.util.*;

요런 문구를 봤을 것이다. 이게 JDK 안에 포함되어 있다고 보면 쉽다.
JDK에는 javac(컴파일러)가 존재하는데 컴파일러를 통해 JAVA 소스 파일을 클래스 파일로 가공할 수 있게 된다.


2. JRE (Java Runtime Enviroment)

JAVA 개발 키트(JDK)의 일부로 JRE는 JAVA 가상 머신(JVM), JAVA 클래스 라이브러리, Java 클래스 로더로 구성된다.

무슨 말인고 하니 그냥 실행 환경이라고 생각하면 된다.
JVM에 구동시키기 전에 컴파일된 자바 클래스 파일을 읽어들이고 연결한다.


3. JVM (Java Virtual Machine)

자바 가상 머신은 자바 바이트코드를 실행할 수 있는 주체이다.

스택 기반 가상머신으로 실제로 컴파일되어 로드된 클래스를 실행시킨다.

Garbage collector

Garbage collection은 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다. JAVA는 JVM 내부에 다음과 같은 작업을 수행하는 Garbage collector가 포함되어있다.

Garbage collector에 대해서는 다음 글에서 상세하게 다룬다.


요약

JDK : JAVA 소스 읽기 / 쓰기
JRE : JAVA 소스 읽기
JVM : javac로 컴파일되어 class 바이트 코드 실행

제일 중요한거 : 어차피 JDK깔면 다깔림;;


정리하며

오늘은 JAVA와 개발도구인 JDK, 런타임 JRE,가상머신 JVM을 알아보았다. 이 글에선 JAVA 실행환경 구성에 대해서는 다루지 않겠다. 형식적인 블로그 글은 쓰고 싶지않다.

오늘 저녁은 짬뽕이다. 🥕


참조 : https://velog.io/@cateto/Java-Eclipse%EC%97%90-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EC%8B%9C-jdk-jre-%EC%B0%A8%EC%9D%B4
https://medium.com/@lazysoul/jvm-%EC%9D%B4%EB%9E%80-c142b01571f2

좋은 웹페이지 즐겨찾기