"Write once, run anywhere"
Java는 인터넷 환경에 적합하도록 고안된 객체지향 프로그래밍 언어이며, JVM을 동반한다.
인터넷 출현에 따라 웹에서의 활용을 목표로 운영체제 독립성을 가진 언어로부터 Java를 탄생시켰다.
Java로 작성된 프로그램은 운영체제(OS)와 하드웨어에 종속되지 않기에 한 번의 프로그램 작성으로 어디서든 실행된다. 이러한 Java의 이식성은 JVM에 기반한다.
JVM이란 Java 프로그램에 OS 독립성을 부여하면서 메모리 관리(GC) 기능도 수행하는 Java Virtual Machine을 뜻한다. JIT compiler에 의해 성능이 좌우된다.
Java 컴파일러(javac)는 Java로 작성된 프로그램(.java)을 바이트 코드(.class)로 변환하고 JVM은 바이트 코드(.class)를 바이너리 코드로 변환해 실행시킨다. 이때 인터프리터와 JIT compiler가 그 역할을 수행한다.
즉, 사람이 작성한 코드를 VM이 이해할 수 있는 코드로, 그리고 CPU가 이해할 수 있는 코드로 점차 변환하는 것이다.
Java는 순수한 객체지향 언어라는 평가를 받는다.
기본 구문은 cpp에서, 객체지향 관련 구문은 small talk라는 언어에서 차용했다.
한편 Java8.0은 현재 추세에 따라 함수형 언어의 기능을 추가한 버전이다.
Java는 Java API를 통해 좋은 개발 환경을 제공한다. 네트워크, 멀티쓰레드 관련 기능 등을 포함하는 클래스 라이브러리이다. 구체적인 내용은 Oracle에서 확인할 수 있다.
한편 Java는 Dynamic loading로 시점에 따라 필요한 클래스만을 로딩하기에 프로그램이 유연하도록 한다.
인터넷, JVM / cpp, 객체지향 / Java API, multithread, network / Garbage collection, dynamic loading /
Java의 정석(3rd Edition, 남궁성)
Java API(오라클)(https://docs.oracle.com/javase/8/docs/api/)
바이트코드와 바이너리 코드의 차이는 무엇일까?(https://shrtorznzl.tistory.com/82)
바이트 코드, 바이너리 코드란??(https://velog.io/@ktf1686/%EB%B0%94%EC%9D%B4%ED%8A%B8-%EC%BD%94%EB%93%9C-%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC-%EC%BD%94%EB%93%9C%EB%9E%80)
바이너리와 바이트 코드란?(+ 기계어란?)(https://usefultoknow.tistory.com/entry/%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC%EC%99%80-%EB%B0%94%EC%9D%B4%ED%8A%B8-%EC%BD%94%EB%93%9C%EB%9E%80-%EA%B8%B0%EA%B3%84%EC%96%B4%EB%9E%80)
[Java]자바의 동작과정 Java Compiler와 JVM(https://kingofbackend.tistory.com/123)
[Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리 (1/2)(https://mangkyu.tistory.com/118)
Java 8 에서 왜 함수형 프로그래밍이 도입되었을까?(https://tecoble.techcourse.co.kr/post/2021-09-30-java8-functional-programming/)