Java 란?
💡썬 마이크로시스템즈에서 개발하여 1996년 1월에 공식 발표한 객체지향 프로그래밍 언어다.
자바로 작성된 프로그램은 운영체제 종류에 관계없이 실행 가능하다는 큰 장점이 있으며,
객체지향 개념과 C++의 장점을 채택하고, 간결하게 배울 수 있고 활용이 가능하다.
TIOBE의 자료를 참고해서 세계에서 얼마나 자주 쓰이는 언어인지 알아보려 한다.
2024년 기준 가장 많이 쓰이는 언어 중 4위에 해당한다.
높은 순위에 있긴 하지만, 1위, 2위가 아닌 왜 4위인 Java를 사용하는 걸까?
각 언어에 따라 개발용도가 다르다. Python, C 언어로도 웹 개발을 할 수 있지만
Java는 객체지향 프로그래밍 언어(OOP)라는 점과 Spring Framework라는 환경을 지니고 있어
아직까지 큰 강점을 지니고 있다.
Java 언어의 특징
- 운영체제에 독립적
C, C++ 각각의 플랫폼에 따라 실행 파일이 다르므로, 플랫폼이 달라지면 새로 컴파일을 해야 한다.
자바는 이러한 문제들을 해결하고자 JRE(Java Runtime Environment)가 설치되어 있는
모든 운영체제에서 실행이 가능하도록 만들어졌다. - 객체 지향 언어 ( Object Oriented Programming )
자바는 객체지향 프로그래밍 개념을 사용하는 언어이다. 따라서 모든 기능은 객체로 만들어 사용한다.
객체란 기능과 실체가 있으며, 클래스를 기반으로 한 변수를 클래스의 인스턴스라고도 불려진다.
여러 객채들을 만들고 조합하여 하나의 프로그램을 실행하도록 설계되어 있는 것이다. - 비교적 배우기 쉬움
- 자동 메모리 관리 ( Garbage Collection )
C언어를 이용하면 free()라는 함수를 통해 직접 메모리를 해제해주어야 한다.
하지만 자바는 자동으로 메모리를 관리해 주는 기능을 추가했다.
메모리의 생성과 소멸을 Garbage Collector를 통해 자동으로 사용하지 않는 메모리를 수거한다. - 함수형 프로그래밍 지원
자바 8부터 함수형 프로그래밍을 지원하여 람다식과 스트림을 사용할 수 있다.
컬렉션에 대해 매핑, 집계를 처리하기 쉬워지고 간결한 코드 작성이 가능하다.
JVM ( Java Virtual Machine )
💡자바를 실행하기 위한 가상 컴퓨터이다.
곧 자바를 실행시키는 도구로써, 운영체제에 독립적일 수 있게 도와준다.
자바 코드로 작성한 프로그램을 각 운영체제에 맞게 해석 후 실행하는 프로그램이다.
자바를 사용하기 위해서는 JDK나 JRE 설치가 꼭 필요하다.
JVM은 크게 아래와 같이 이루어져 있다.
- Class Loader (클래스 로더)
자바 컴파일러를 사용해서. java 파일을. class 파일로 컴파일한다.
이후 Class Loader를 통해 JVM에. class 파일을 Load 하고, JVM 위에 탑재한다.
즉, 클래스를 처음으로 참조할 때, 해당 클래스를 로드하고 링크하는 역할을 한다. - Execution Engine (실행 엔진)
. class를 실행시키는 역할이다.
클래스 로더가 JVM내의 Runtime Data Read에 클래스를 배치하고, 실행 엔진에 의해 실행된다.
➡️ Interpreter (인터프리터)
자바 바이트 코드를 명령어 단위로 읽어서 실행한다.
한 줄씩 수행하기 때문에 느리다는 단점이 있다.
➡️ JIT compiler (Just-In-Time)
인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일하여
기계어로 변경하고, 이후에는 직접 기계어로 실행하는 방식이다. - GC (Garbage Collector)
GC는 동적 할당 된 메모리 영역(heap) 중에서 더 이상 사용하지 않는 인스턴스를 찾아서
메모리에서 삭제한다. 즉 프로그래머가 메모리를 따로 관리하지 않아도 된다. - Runtime Data Area
자바 프로그램을 수행하기 위해 OS에서 할당받은 메모리 공간을 의미한다.Runtime Area
➡️ PC Register
JVM은 스택 기반으로 동작하는데, 스택에서 주소를 찾아서 별도의 메모리 공간에 저장한다.
따라서, 현재의 어떤 명령을 실행해야 할 지에 대한 부분을 기록한다.
➡️ JVM Stack
프로그램 실행 과정에서 호출된 메서드의 파라미터, 지역변수, 리턴 값 및 연산 시
발생하는 값들을 임시로 저장한다.
➡️ Native Method Stack
자바 프로그램이 컴파일되어 생성되는 바이트 코드가 아닌, 실제 실행 할 수 있는 기계어로 작성된
프로그램을 실행시키는 영역이다.
➡️ Heap
GC의 대상이 되는 영역이며, 프로그램 실행 중 생성되는 인스턴스는 모두 위 영역에 생성된다.
즉, 인스턴수 변수들이 생성되는 공간이다.
➡️ Method Area (Class Area, Static Area)
클래스에 대한 정보가 저장되는 공간이며, 클래스 변수 또한 함께 생성된다.
➡️ Runtime Constant Pool
static 영역에 존재하는 별도의 관리 영역,
상수 자료형을 저장하여 참조하고 중복을 막는 역할이다.
JDK와 JRE
💡 JDK (Java Development Kit)
Java를 사용하기 위해 필요한 모든 기능을 갖춘 Java용 SDK (Software Development Kit)이다.
JDK는 JRE를 포함하고 있다.
즉, JDK는 프로그램을 생성, 실행, 컴파일할 수 있다.
💡 JRE (Java Runtime Environment)
JVM + Java Class Library 등으로 구성되어 있으며,
컴파일된 Java 프로그램을 실행하는데 필요한 패키지이다.
💡 SDK (Software Development Kit)
운영체제 또는 프로그래밍 언어 제작사가 제공하는 Tool이다.
SDK의 대표적인 예로, JDK 등이 있다.
이러한 SDK를 활용하여 Application을 개발할 수 있다.
OUTRO
처음으로 기술 내용 블로그를 작성해 봤는데,
필력이 다소 아쉬웠던 것 같습니다.
앞으로는 하루에 한 두 개씩 작성해 볼 생각이며, 더 퀄리티 높은 글들을 작성해보겠습니다!
그러면 다음 포스팅에서 뵙겠습니다.
'Language > Java' 카테고리의 다른 글
[Java] 불변 객체 (Immutable Object)란? (0) | 2024.04.08 |
---|---|
[Java] 기본형과 참조형(Primitive Type & Reference Type) (0) | 2024.04.06 |
[Java] 클래스, 객체, 메서드, 생성자 (0) | 2024.03.30 |
[Java] 연산자 (Operator) (0) | 2024.03.29 |
[Java] 변수와 데이터 타입이란? (0) | 2024.03.26 |