Java : 객체 지향 프로그래밍 언어 및 소프트웨어 플랫폼
JVM(Java Vitrual Machine, 자바 가상 머신) : 자바를 실행하기 위한 가상 기계(자바 바이트코드를 환경에 따라 다른 언어로 컴파일해줌)
JRE(Java Runtime Environment, 자바 실행 환경) : 자바 프로그램을 실행하는 데 필요한 모든 라이브러리와 JVM을 포함한 것
⇒ 자바 프로그램 개발이 아니라 단순히 실행만 하려할 때 필요한 것
JDK(Java Development Kit, 자바 개발 키트) : JRE, 자바 컴파일러(코드를 자바 바이트코드로 번역해줌), 디비거(오류를 찾아 수정해줌), JAR 도구(번역된 결과물을 실행용으로 압축해줌), 프로파일러(성능 등 모니터링) 등을 포함한 것
⇒ 자바 프로그램을 개발, 테스트, 실행할 때 사용
Java의 특징
객체 지향 언어 : 하나의 기능을 객체 형태로 만들고, 객체들을 결합하여 하나의 프로그램을 만듦
인터프리터 언어 : 텍스트 소스를 컴파일하여 클래스 파일로 만들고, JVM을 통해 클래스 파일을 인터프리트 하며 실행됨
<aside> 💡
번역(Compiled) vs. 통역(Interpreted)
번역 : 개발자가 짠 코드를 미리 번역해서 컴퓨터에게 전달
⇒ 대부분의 오류를 미리 걸러낼 수 있음
ex) C 계열 언어, Java 등
통역 : 개발자가 짠 코드를 컴퓨터에게 전달하면, 컴퓨터에서 통역 프로그램이 실시간으로 통역함
⇒ 개발에는 간편하지만, 오류에 취약하고, 실행이 느림
</aside>
독립적인 플랫폼 : 어떤 운영체제라도 독립적으로 자바 언어를 사용할 수 있음
<aside> 💡
C 계열 언어 vs. Java
C 계열 언어 : 윈도우, 맥, 리눅스 등 운영체제에 따라 다르게 번역해야 함
Java : JVM이라는 프로그램을 사용해서 각 운영체제에 따라 다시 번역함 ⇒ 개발할 때 어떤 언어로 컴파일할지 신경쓰지 않아도 됨
</aside>
자동 메모리 관리 : 개발자가 직접 메모리에 접근할 수 없고, 자바가 직접 관리함
멀티 쓰레딩 지원 : 하나의 프로그램 단위가 동일한 쓰레드를 동시에 수행할 수 있음
동적임 : 필요한 객체만 생성하여 사용하고, 오류가 발생하면 오류의 클래스만 수정하면 됨
안전하고 강력함 : 모든 메모리 접근을 자바 시스템이 관리하기에 시스템 붕괴의 우려가 없음