신입 개발자라면 자고로 개념을 잘 알고 있어야한다고 생각합니다. 정말 기본 개념이지만 생각보다 머리속에 남지 않았던 경향이 있었습니다. 따라서 오늘 기본적인 이야기를 작성하면서 개념을 제 것으로 만드는 시간을 가져볼게요. 여러분도 보고 싶으시면 보세요.
Java란?
Java는 프로그래밍 언어입니다(당연하죠). 1995년 미국의 '썬마이크로시스템즈’라는 회사에서 개발한 객체지향 언어입니다.현재는 '썬마이크로시스템즈’가 엔터프라이즈용 데이터베이스로 유명한 '오라클’에 인수가 되었고, 그 이후 자바는 '오라클’사에 의해 배포되고 있습니다.
Java의 가장 큰 특징
자바는 서로 다른 실행환경을 가진 시스템간에 프로그램을 옮겨 실행할 수 있는것을 말합니다. 자바는 자바 실행환경(JRE)이 설치 되어 있는 모든 운영체제에서 실행이 가능합니다.
이러한 특징 때문에 널리널리 사용되어서 한국이 자바의 왕국이 된 것인가요?
아무튼 저 특징 때문에 설명할 것이 많아집니다. 꼬리에 꼬리를 무는 형식이죠 like 면접....
JRE가 있어야한다는데 JDK를 설치하면 같이 따라오는 친구이기 때문에 JDK부터 설명해볼게요.
JDK란?
JDK(Java Development Kit)는 자바 프로그래밍 언어를 개발하고 실행하는 데 필요한 도구 모음입니다. JDK는 자바 프로그램을 작성, 컴파일 및 실행하는 데 필요한 모든 도구와 라이브러리를 제공합니다.
JDK는 다음과 같은 요소로 구성됩니다.
- 자바 컴파일러(Java Compiler): 자바 소스 코드를 컴파일하여 바이트 코드로 변환합니다. 이러한 이유로 우리가 작성한 코드를 바이트 코드로 변환합니다. 이러한 이유 때문에 프로그램을 어떤 환경에서 실행 할 수 있습니다.
- Java Virtual Machine(JVM): 바이트 코드를 실행하는 가상 머신입니다.(이 가상 머신을 운영체제에 맞게 다운로드하면 우리가 제작한 프로그램을 실행 할 수 있습니다.)
- 자바 런타임 환경(Java Runtime Environment): 자바 응용 프로그램을 실행하는 데 필요한 모든 라이브러리 및 도구를 포함합니다.
- 자바 API(Java API): 자바 언어를 사용하여 프로그램을 작성할 때 사용할 수 있는 클래스와 인터페이스를 제공합니다.
JDK는 개발자가 자바 애플리케이션 및 앱렛을 개발, 테스트, 디버깅하고 배포하는 데 필요한 모든 도구를 제공합니다.
JRE란?
JRE(Java Runtime Environment)는 Java 애플리케이션을 실행하는 데 필요한 *런타임 환경*입니다. JRE는 Java Virtual Machine(JVM), Java 클래스 라이브러리, 자바 런타임 환경 설정 및 기타 필수 구성 요소로 구성됩니다.
JVM은 Java 애플리케이션을 실행하는 데 필요한 핵심 구성 요소이며, JRE에서 제공됩니다. JVM은 플랫폼 독립적이기 때문에, 동일한 Java 코드가 서로 다른 운영 체제 및 하드웨어 환경에서 실행될 수 있습니다.
Java 클래스 라이브러리는 Java 프로그래밍 언어의 핵심이며, JRE에서 제공됩니다. 이 라이브러리는 다양한 유틸리티 클래스, 데이터 구조, 입출력 함수, 네트워킹 및 보안 기능 등을 포함하고 있습니다.
자바 런타임 환경 설정은 JRE를 설치할 때 시스템 환경에 맞게 구성됩니다. 이 환경 설정은 Java 클래스 라이브러리의 경로, JVM 설정 등을 포함합니다.
Java 애플리케이션을 실행하기 위해서는 먼저 해당 운영 체제에 JRE가 설치되어 있어야 합니다. JRE는 Java 개발 키트(JDK)와 함께 제공되며, JDK를 설치하면 자동으로 JRE도 함께 설치됩니다.
런타임 환경이란?
런타임 환경(Runtime Environment)은 컴퓨터 시스템에서 프로그램이 실행되는 환경을 말합니다. 이는 프로그램이 실행되는 동안 필요한 기술적인 요구사항을 제공하며, 소프트웨어와 하드웨어 간의 인터페이스를 관리합니다. 런타임 환경은 프로그램이 실행되는 플랫폼에 따라 다르게 구성됩니다. 예를 들어, 웹 브라우저에서 실행되는 JavaScript 코드는 브라우저에서 제공하는 런타임 환경에서 실행됩니다. 또한, Java 애플리케이션을 실행하기 위해서는 Java 런타임 환경(JRE)이 필요합니다. 런타임 환경은 일반적으로 다음과 같은 기능을 제공합니다.
1. 프로그램 실행 환경 구성
2. 메모리 관리
3. 입출력 관리
4. 예외 처리 및 오류 처리
5. 멀티 스레딩 지원
6. 보안 관리 런타임 환경은 프로그램이 실행되는 동안 필요한 다양한 기술적인 요구사항을 제공하여, 프로그램의 안정성과 보안성을 유지하며, 실행 효율을 최적화합니다.
JVM이란?
JVM(Java Virtual Machine)은 Java 애플리케이션을 실행하는 데 사용되는 가상 머신입니다. JVM은 플랫폼 독립적이며, 운영 체제나 하드웨어의 종류에 상관없이 동일한 바이트 코드를 실행할 수 있도록 설계되어 있습니다.
Java 프로그램은 일반적으로 Java 컴파일러를 사용하여 자바 소스 코드를 컴파일하여 바이트 코드로 변환합니다. 이 바이트 코드는 JVM에서 실행됩니다. JVM은 다음과 같은 주요 기능을 제공합니다.
- 클래스 로더: JVM은 클래스 로더를 사용하여 컴파일된 클래스 파일을 로드합니다. 클래스 로더는 클래스 파일을 JVM의 메모리에 로드하고, 필요한 클래스를 참조하는 다른 클래스를 로드합니다.
- 바이트 코드 실행: JVM은 로드된 클래스 파일의 바이트 코드를 실행합니다. 이때, JVM은 바이트 코드를 해석하고, 필요한 메모리를 할당하고, 스레드를 관리합니다.
- 메모리 관리: JVM은 자동으로 메모리를 할당하고, 더 이상 사용되지 않는 객체를 제거하여, 메모리 누수를 방지합니다.
- 예외 처리: JVM은 예외를 처리하고, 해당 예외에 대한 적절한 처리 방법을 찾습니다.
- JIT 컴파일러: JVM은 일부 바이트 코드를 실행하기 전에, 해당 코드를 기계어로 컴파일하여 실행 속도를 높입니다.
Java 애플리케이션을 실행하기 위해서는 해당 운영 체제에 JRE(Java Runtime Environment)가 설치되어 있어야 합니다. JRE는 JVM을 포함하여 필요한 기타 구성 요소를 제공합니다.
자바 작동 원리
자바는 컴파일 타임 환경과 런타임 환경 두개로 나누어지는군요.
IDE를 통해서 쉽게 컴파일하고 자바 바이트 코드가 런타임 환경에서 실행되는 방식입니다.
클래스 파일(자바 바이트 코드)을 자바 가상 머신으로 작동해서 필요한 메모리를 할당하고, 스레드를 관리합니다.
바이트 코드가 인터프리팅 되는 것도 있고 *JIT 컴파일* 되는 경우도 있군요.
그 뒤로는 다른 언어와 비슷하게 작동하는 것 같습니다.
JIT 컴파일러란?
Java JIT(Just-In-Time) 컴파일러는 자바 가상 머신(JVM)에서 실행되는 프로그램 코드를 더 빠르게 실행하기 위한 최적화 기술입니다.
Java는 처음에 소스 코드를 컴파일하여 바이트 코드로 변환합니다. 이 바이트 코드는 JVM에서 실행되며, JVM은 이 코드를 해석하여 실행합니다. 그러나 이 과정에서 해석 및 실행하는데 비용이 발생합니다.
JIT 컴파일러는 이러한 비용을 줄이기 위해, 실행되는 코드를 바이트 코드에서 더 빠른 기계어로 컴파일합니다. 이 컴파일된 기계어는 캐시에 저장되며, 이후에 같은 코드가 실행될 때 재사용됩니다. 따라서 JIT 컴파일러는 반복적으로 실행되는 코드의 성능을 크게 향상시킵니다.
JIT 컴파일러는 다음과 같은 세 가지 단계로 동작합니다.
- 로드된 코드를 바이트 코드 단위로 나누어 분석합니다.
- 바이트 코드를 실행 전에 해당 코드를 분석하여 최적화할 수 있는 부분을 찾습니다.
- 최적화된 코드를 더 빠른 기계어 코드로 컴파일하여 캐시에 저장합니다.
JIT 컴파일러는 이러한 과정을 통해 실행 시간을 단축시키고, 더 높은 성능을 제공합니다. 그러나 JIT 컴파일러는 프로그램 시작 시간에 약간의 부담을 주는 등 부가적인 비용이 있을 수 있습니다. 따라서 JIT 컴파일러는 대부분의 경우 성능 향상을 제공하며, 특정 경우에는 약간의 성능 저하를 유발할 수도 있습니다.
공부 소감
확실히 처음부터 기초에 대한 이해를 하고 가니까 마음이 든든하다고 생각됩니다. 기초가 튼튼해야 더 높이 올라갈 수 있으니까요. AI시대가 도래하면서 신입 개발자가 들어갈 자리가 없어질 것이라고 하는데... 열심히 해서 제가 원하는 곳에 잘 들어가고 싶습니다. 그러기 위해서는 더욱 열심히 해야겠죠. 자신이 좋아하는 일에 대한 꾸준한 관심과 열정이 있다면 성공할 수 있을 것 같고 특히 깨달음이 있다면 그것은 성장을 한 것이라고 생각이 됩니다.
Java 언어에 대한 지속적인 공부로 더 나은 미래를 만들어 가보겠습니다.
출처
'코딩 개발 > Java' 카테고리의 다른 글
Java - Heap & Stack 메모리 (feat. 예제를 통한 이해) (0) | 2023.04.02 |
---|---|
Java - Cohesion & Coupling(응집도, 결합도) (0) | 2023.04.02 |
Java - OOP(Object OrienTed Programming) (0) | 2023.04.02 |
Java - IDE 개념 및 간단한 사용법 (feat. Eclipse) (0) | 2023.04.02 |
Java - JDK 1.8을 사용하는 이유 (0) | 2023.03.29 |