운영체제에 독립적
-자바 응용프로그램은 운영체제나 하드웨어가 아닌 자바가상머신(JVM)하고만 통신하고, JVM(Java Virtual Machine)이 자바 응용프로그램으로부터 전달 받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달
-자바로 작성된 프로그램은 운영체제에 독립적이지만, JVM은 운영체제에 종속적임
💡
[기존언어] ↔ [운영체제, 하드웨어]
[자바언어] ↔ [JVM] ↔ [운영체제, 하드웨어]
💡
.java 파일 : 사람이 읽을 수 있는 text 언어로 이루어짐(프로그래밍 영역)
.class 파일 : .java파일을 컴파일 한 후 생성되는 파일이며, Bytecode로 이루어짐. JVM이 .class 파일을 각 운영체제에 맞게 기계어로 변환하고 실행
.java 파일(text 언어) → 컴파일 →
Hello.class생성(bytecode) → 실행 → "Hello, world." 출력
즉, .java파일을 컴파일러에 의해 컴파일 되면,
.class파일 후 .class파일의 bytecode를 JVM이 읽고,
이를 각 Operating System에 맞는 기계어로 번역하여 OS에 전달
객체지향언어
-객체지향 프로그래밍 언어(Object-oriented programming language)
-객체지향 개념의 특징 : 상속, 캡슐화, 다형성
단순화된 언어
-간결하면서도 명료한 객체지향적 설계
자동 메모리 관리(Garbage Collection)
-자바로 작성된 프로그램이 실행되면, 가비지컬렉터가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 됨(프로그래밍에 집중 가능)
네트워크과 분산처리 지원
-풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원
멀티쓰레드를 지원
-일반적으로 멀티쓰레드(multi-thread)의 지원은 사용되는 운영체제에 따라 구현방법과 처리방식이 상이함. 그러나 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과 상관없이 구현가능하며, 관련된 라이브러리(Java API)가 제공되므로 구현이 쉬움
-여러 쓰레드에 대한 스케줄링(scheduling)을 자바 인터프리터가 담당
동적 로딩(Dynamic Loading)을 지원
-보통 자바로 작성된 애플리케이션 여러개의 클래스고 구성. 자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용 가능
-일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일 하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션 작성 가능