자바의 역사
자바의 역사는 1991년으로 거슬러 올라간다.
1991년에 "Green"이라는 프로젝트가 생기면서 자바의 모태가 탄생하기 시작했다.
James Gosling, Mike Sheridan, Patrick Naughton 이렇게 3명의 젊은이가 TV와 시청자가 서로 상호 작용 할 수 있는(interactive한) 것을 만들기 위해서 시작되었지만 너무 앞서가는 것이었다.
1992년 고슬링의 사무실 앞에 있는 참나무를 보고 이름을 지은 "Oak"라는 언어다.
그 이후에 1995년 "Oak"라는 언어의 이름이 커피의 한 종류를 뜻하는 "자바 커피"의 이름을 본따 "Java"라고 바뀌면서 자바 기술이 시작하게 되었다. 1995년에 자바 언어를 만들면서 "Write Once, Run Anywhere"(WORA)라는 모토가 만들어졌으며, 여러 플랫폼에서 수행할 수 있는 개발 언어를 목표로 개발되었다.
1996년 JDK 1.0 출시되었으며 이듬해인 1997년에 출시된 JDK1.1은 3주만에 22만 다운로드를 기록하였다.
JDK, JRE
- JDK: Java Development Kit
- JRE: Java Runtime Environment
JRE는 실행만을 위한 환경이다. JRE만 설치하면, 자바를 컴파일하는 등의 각종 프로그램이 제외된 상태로 설치된다.
가장 좌측을 보면 JDK와 JRE로 나뉘어져있는 것을 볼 수 있다. JRE는 자바를 실행할 수 있는 환경의 집합이라고 생각하면된다. 그리고 JRE에 블록처럼 칸칸이 쌓여있는 것은 자바에서 제공하는 라이브러리들이다.
자바언어의 특징
1. 자바는 "단순하고, 객체지향이며, 친숙"해야 한다.
자바는 처음 만들 때부터 객체지향으로 디자인되어 있다. 그리고, 다형성, 캡슐화 등 객체 지향 언어의 특징들을 지원할 수 있는 구조로 되어 있다.
그리고, 자바로 개발할 때에는 처음부터 모든 것을 만들 필요가 없다. 개발하면서 필요한 여러 기능들은 이미 API를 통해서 제공하고 있다. 파일을 읽고 쓰거나 네트워크로 데이터를 주고 받는 I/O, 그래프 UI 등을 개발하기 위한 여러 라이브러리를 통해서 보다 쉽게 개발할 수 있는 환경을 제공하고 있다. 파일을 읽고 쓰거나 네트워크로 데이터를 주고 받는 I/O, 그래픽 UI 등을 개발하기 위한 여러 라이브러리를 통해서 보다 쉽게 개발할 수 있는 환경을 제공한다.
2. 자바는 "견고하며, 보안상 안전"하다.
자바는 컴파일할 때와 실행할 때 문법적 오류에 대한 체크를 한다. 메모리 관리 모델이 매우 단순하고, C를 배우고 사용하는 개발자들의 머리를 아프게 하는 포인터의 개념이 없다. 이 특징들은 자바를 매우 믿을 수 있고(reliable) 견고한 소프트웨어가 될 수 있도록 도와준다.
자바는 기본적으로 분산 환경에서 사용하기 위하여 디자인되었다. 분산 환경에서 보안은 중요한 부분 중 하나다. 자바 기술은 외부에서 침입이 불가능한 애플리케이션을 만들 수 있도록 해준다.
3. 자바는 "아키텍처에 중립적이어야하며 포터블"해야 한다.
자바로 작성한 프로그램은 매우 다양한 하드웨어 아키텍처에서 수행할 수 있도록 되어 있다. 따라서 자바는 아키텍처에 중립적인 바이트 코드를 제공한다. 따라서, 자바의 버전만 동일하다면, 동일한 프로그램은 어떤 플랫폼에서도 실행할 수 있다. 이러한 호환성과 포터블한 환경을 제공하는 것은 JVM 덕분이다.
4. 자바는 "높은 성능"을 제공해야 한다.
자바는 실행 환경에서 최대한의 성능을 낼 수 있도록 되어 있다. 게다가 자동화된 가비지 컬렉터는 낮은 우선 순위의 쓰레드로 동작하기 때문에 보다 높은 성능을 낼 수 있다. 그리고, 보다 빠른 성능을 위해서 네이티브 언어로 작성한 부분을 자바에서 사용할 수 있도록 되어 있다.
5. 자바는 "인터프리터 언어이며, 쓰레드를 제공하고, 동적인 언어"이다.
자바 인터프리터는 자바 바이트 코드를 어떤 장비에서도 수행할 수 있게 해준다. 따라서, 시존에 사용하던 무거운 컴파일과 링크와 테스트 사이클을 거쳐야 하는 개발 환경보다 빠른 환경을 구축할 수 있다.(하지만 지금의 자바 개발 환경은 각종 라이브러리들로 인해 그렇게 단순하지만은 않다.)
자바는 멀티 쓰레드 환경을 제공하기 때문에, 동시에 여러 작업을 수행할 수 있다. 따라서 사용자에게 매우 빠른 사용 환경을 제공한다.
자바 컴파일러는 컴파일시 매우 엄격한 정적인 점검을 수행한다. 그리고, 실행시에 동적으로 필요한 프로그램들을 링크시킨다. 게다가 새로운 코드는 다양한 소스에서 요청에 의해서 연결될 수 있다.
JIT 컴파일러
JIT라는 것은 Just-In-Time의 약자다. JIT를 사용하는 언어에는 자바와, NET 등이 있다. 즉, 자바에서만 사용하는 개념이 아니다. JIT를 좀 더 쉬운 말로 하자면 "동적 변환(dynamic transition)"이라고 보면 된다. 이러한 JIT라는 것을 만든 이유는 프로그램 실행을 보다 빠르게 하기 위해서이다. 명칭이 컴파일러지만, 실행시에 적용되는 기술이다.
JVM과 GC
- JVM : Java Virtual Machine(자바 가상 머신)
- GC : Garbage Collector(가비지 컬렉터)
JVM은 작성한 자바 프로그램이 수행되는 프로세스를 의미한다. 다시 말해서, java라는 명령어를 통해서 애플리케이션이 수행되면, JVM 위에서 애플리케이션이 동작한다. 이 JVM에서 작성한 프로그램을 찾고 수행하는 일련의 작업이 진행된다.
자바의 메모리 관리는 개발자가 하지 않아도 된다. 메모리 관리를 JVM이 알아서 하기 때문이다. 이때 JVM 내에서 메모리 관리를 해주는 것을 바로 "가비지 컬렉터"라고 부른다.
참고
https://velog.io/@jsj3282/%EC%9E%90%EB%B0%94%EC%9D%98-%EC%97%AD%EC%82%AC%EC%99%80-JVM
'언어 > JAVA' 카테고리의 다른 글
21장 제네릭 (0) | 2021.11.04 |
---|---|
20장 java.lang 패키지 (0) | 2021.11.03 |
18장 정리 (0) | 2021.10.30 |
17장 어노테이션 (0) | 2021.10.28 |
15장 Nested 클래스 (0) | 2021.10.27 |