Language/Java

[Java] 자바란? ( Java )

by Donghwan 2020. 12. 25.

자바란? ( Java )

운영체제에 독립적

Java로 작성된 애플리케이션은 JVM이라는 가상의 기계에서 동작하기 때문에, Java는 운영체제와 하드웨어에 독립적입니다. 따라서 한번 작성하면 어디에서나 실행이 가능합니다. Write Once, Run anyWhere

하지만 Java 애플리케이션이 동작하는 JVM은 각 OS마다 다른 JVM이 존재하기 때문에 운영체제에 종속적입니다. JVM을 한단계 더 거치고, 하드웨어에 맞게 컴파일 된 상태가 아니기 때문에 해석(Interpret) 과정을 거치기 때문에 속도가 느리다는 단점이 있습니다. 하지만 JIT 컴파일러와 향상된 기술로 속도의 격차가 많이 줄어들었습니다.

객체지향

Java는 상속, 추상화, 다형성, 캡슐화의 특징을 가진 객체 지향 언어( Object-Oriented-Programing Language ) 입니다.

Garbage Collection

Java는 Garbage Collector가 자동적으로 메모리 관리를 해주기 때문에 개발자는 메모리를 따로 관리하지 않아도 됩니다. C 나 C++ 에서는 OS 레벨의 메모리에 직접 접근하기 때문에 할당받았던 메모리를 명시적으로 해제해주어야 합니다. 그렇지 않으면 memory leak이 발생하게 됩니다. memory leak 이 발생하면 다른 프로그램에도 영향을 끼칠 수 있다. JVM은 C로 쓰여진 프로그램으로, 오브젝트가 필요해지지 않는 시점에서 알아서 메모리를 확보합니다.

멀티스레드를 지원한다

일반적으로 멀티 스레드의 지원은 사용되는 운영체제에 따라 구현방법과 처리방법이 다르지만, Java는 관련 라이브러리가 제공되므로 구현이 쉽습니다. 그리고 스레드에 대한 스케쥴링을 Java 인터프리터가 담당합니다.

동적 로딩(Dynamic Loading)

Java로 작성된 애플리케이션은 여러 개의 클래스로 구성되어 있습니다. Java는 동적 로딩을 지원하는데 동적로딩이란 실행 시 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있습니다. 그 외에도 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일 하지 않아도 됩니다. 로드타임 동적 로딩(load-time dynamic loading)과 런타임 동적 로딩(run-time dynamic loading)이 있습니다.

JVM, JRE, JDK

JVM(Java Virtual Machine)

JVM은 Java를 실행하기 위한 가상의 기계입니다.

Java는 JVM에서만 실행이 됩니다.

각 OS는 각각의 JVM을 가지고 있어서 JVM은 OS에 종속적입니다.

JRE(Java Runtime Environment)

Java가 실행되는 환경으로 Java로 작성된 응용프로그램이 실행되기 위한 최소 환경입니다.

JRE는 JVM, 코어 클래스 및 지원 파일로 구성 되어있습니다.

JDK(Java Development Kit)

JDK 안에는 JRE, JAVA, Compiler, jar, javadoc 및 Java 개발에 필요한 툴들이 포함되어 있다.

javac.exe는 Java 컴파일러로 Java코드를 바이트코드로 컴파일 합니다.

java.exe는 Java 인터프리터로 컴파일러가 생성한 바이트 코드를 해석하고 실행합니다.

javap.exe는 역어셈블러로 컴파일된 클래스파일을 원래의 소스로 변환합니다.

javadoc.exe는 자동문서생성기로 소스파일에 있는 주석을 이용하여 JAVA API 문서와 같은 형식의 문서를 자동으로 생성합니다.

jar.exe는 압축프로그램으로 클래스파일과 프로그램의 실행에 관련된 파일을 하나의 jar파일로 압축하거나 압축해제합니다.

클래스의 실행 과정

  1. 프로그램의 실행에 필요한 클래스(.class)를 로드한다.
  2. 클래스파일을 검사한다.(파일형식, 악성코드 체크)
  3. 지정된 클래스에서 main 메소드를 호출한다.

728x90
반응형

'Language > Java' 카테고리의 다른 글

[Java] 제네릭 (Generic)  (0) 2021.04.21
[Java] 다형성  (0) 2021.01.01
[Java] 실행 데이터 영역 (Runtime Data Area)  (0) 2020.12.27
[Java] 자바 클래스 로더  (0) 2020.12.26
[Java] JVM Architecture  (0) 2020.06.07

댓글