본문 바로가기

Java/Java SE, EE

[Java/Java SE, EE] Java 언어란? Java SE, JDK, JRE 그리고 Java EE 소개

자바(Java)

1995년도에 썬 마이크로시스템즈(Sun Mircrosystems)에서 개발한 프로그래밍 언어입니다. 자바 언어에 대한 소개는 다음과 같은 특징으로 요약 할 수 있습니다.

  • 높은 이식성
    하나의 자바 프로그램은 여러 OS에 걸쳐서 실행 될 수 있습니다. 마이크로소프트 사의 윈도우 OS에서 개발 된 자바 프로그램이 유닉스와 리눅스, 맥 OS 등에서 실행 될 수 있고 그 반대 역시 가능합니다. 이를 가능하게 하는 것이 Java JRE입니다. JRE에 대해서는 아래에서 소개하도록 하겠습니다.
  • OOP(Object Oriented Programming)
    자바는 객체 지향 언어로써 캡슐화, 상속, 다형성을 충족합니다. 
    • 캡슐화는 객체(클래스-Class)가 접근 제어자(Public, Protected, Private)를 사용하여 다른 객체에게 자신의 정보에 대한 적절한 제어 권한을 부여하는 것입니다. 이를 통해 객체의 정보를 은닉하고 코드의 수정이 필요할 때 제어 권한이 있는 객체에 대해서만 리펙토링을 수행하면 됩니다.
    • 상속은 다른 객체(부모 클래스-Super class)의 속성(Variables)과 기능(Methods)을 이어받아 새로운 객체(자식 클래스-Child class)를 구현하는 것을 의미합니다. 캡슐화와 마찬가지로 코드의 재사용성과 리펙토링 측면에서 유리합니다. C++과 달리 자바의 상속 관계에서 여러 개의 부모 클래스를 동시에 상속 받는 다중 상속을 지원하지 않습니다. 즉, 하나의 자식 클래스는 하나의 부모 클래스와 상속 관계에 있습니다.
    • 다형성은 하나의 변수 이름 또는 함수 이름이 상황에 따라서 다양하게 해석 될 수 있음을 의미합니다. 이를 위해서 OOP는 오버라이딩(Overriding, 상속 관계에서 부모 클래스가 정의하고 있는 매개 변수 또는 함수를 자식 클래스가 재정의)과 오버로딩(Overloading, 같은 이름의 함수를 여러 개 정의하되 인자로 전달되는-파라미터 타입과 개수를 다르게 하여 역할을 차별화 하는 것)을 지원합니다.
  • 메모리 자동 관리(Managed)
    자바는 가비지 컬렉션(GC, Garbage Collector)에 의해서 메모리를 자동으로 관리합니다. 이로인해 프로그래머가 메모리를 할당 후 free()를 선언하지 않아 메모리 누수(Memory leek)이 생기는 것을 방지합니다. 이는 개발 편의성과 안정성, 생산성에 영향을 높여줍니다. 자바와 같이 메모리를 자동으로 관리하는 언어를 매니지드(Managed)라고 부르며, 반대로 C++처럼 메모리를 프로그래머가 직접 해제/관리하는 언어를 언매니지드(Un-managed)라고 부릅니다.
  • 동적 로딩(Dynamic loading) 지원
    자바 프로그램은 실행되는 시점에서 모든 객체를 생성하지 않고, 객체가 필요한 시점에 도달했을 때 해당 클래스를 동적으로 로딩한 뒤 객체를 생성합니다. 또한 개발 과정에서 프로그램을 수정 할 때 전체 코드를 다시 컴파일하지 않고, 코드가 변경 된 클래스만 별도로 컴파일하므로 유지 보수 측면에서 생산성이 높습니다.

자바 SE(Java SE, Java platform Standard Edition)

자바 SE는 JVM과 자바 프로그램에 필수적인 API를 정의합니다. 다시 말해서 자바 언어가 어떻게 구성되어 있는지에 대한 명세서입니다. 이 명세서는 직접적으로 프로그램을 실행하기 위한 코드로 구현되어 있지 않으며, 다음으로 나오는 JDK에 대한 표준을 제공합니다.

JDK(Java Development Kit)

JDK는 자바 SE에 대한 구현체입니다. 자바 코드를 컴파일하기 위한 컴파일러와 개발에 필요한 도구, 그리고 JRE를 포함하고 있습니다. 자바 개발을 위해 JDK는 필수적으로 설치해야 하며, 반대로 자바 프로그램을 단순히 실행하는 목적이라면 JDK를 반드시 설치해야 하는 것은 아닙니다.

JRE(Java Runtime Environment)

JRE는 자바 프로그램을 실행하기 위한 라이브러리와 JVM 등을 포함합니다. 자바 개발자가 아니라면 JRE만 설치하여도 자바 프로그램을 실행하는데 문제가 없으며, 단순 사용자를 위한 패키지입니다.

JVM(Java Virutal Machine)

자바 가방 머신은 가상의 운영체제입니다. 자바 프로그램을 OS에서 그대로 실행 될 수 없으며(자바 프로그램은 완전한 기계어-Binary가 아니라 바이트 코드로 구성), 자바 프로그램을 해석하고 실행 할 수 있도록 도와주는 것이 JVM입니다. 이는 자바 프로그램이 OS에 관계 없이 실행 될 수 있도록(또는 OS에 대한 고민 없이 프로그램을 개발 할 수 있도록) 도와주는 역할을 합니다. JVM이 OS와 자바 프로그램 사이에서 어떻게 실행되어야 할지를 결정하기 때문입니다. 이로인해 자바 프로그램-자바의 바이트 코드는 OS에 종속적이지 않지만, 이를 해석하는 실행하는 JVM은 OS에 종속됩니다. 따라서 사용하는 OS에 맞는 JVM을 설치해야 합니다. JVM은 JDK 또는 JRE를 설치할 때 함께 설치되는데, 다시 말해서 JDK와 JRE를 설치할 때 OS를 고려해야 한다는 것을 의미합니다.

실제 구동과는 차이가 있지만 다소 추상적이고 이해하기 쉬운 형태로 실행 원리를 정리하면 다음과 같습니다. 자바 개발자는 JDK를 사용하여 자바 소스 코드를 바이트 코드로 컴파일합니다. 이 때 개발자의 OS와 사용자의 OS는 다른 환경에서 개발하더라도 무관합니다. 사용자는 자신의 OS에 맞는 JRE를 설치하고, JRE에 포함되어 있는 JVM이 사용자 OS에 맞게 컴파일 된 바이트 코드를 해석하여 실행하기 때문입니다.

자바 EE(Java EE, Java Enterprise Edition)

자바 EE는 자바 SE를 기반으로 그 위에 탑재되므로 SE의 모든 기능을 포함합니다. 분산형 서버 애플리케이션 개발을 목적으로 하며 JSP, Servlet, JDBC, JNDI, JTA 그리고 EJB 등 다수의 기능을 포함하고 있으며 대규모, 다계층, 확장성, 신뢰성과 보안 네트워킹에 대한 환경 등을 제공합니다.