Java란 무엇인가요?
Java는 1990년대 중반에 등장한, 웹 어플리케이션 코딩에 사용되는 객체지향 프로그래밍 언어입니다. Java를 사용하는 이유는 많지만, 그 중에서도 운영체제 독립성, 객체지향 설계 등이 장점이라 볼 수 있습니다.
📌전자정부표준프레임워크
한국 정부에서 Java/Spring을 표준(전자정부표준프레임워크)으로 정하였습니다. 이로인해 Java/Spring 기반인 정부 과제들도 많고, 높은 일자리 점유율을 갖기 때문에 사실 국내 웹 백엔드 개발에 있어서 Java/Spring은 사실 표준으로 사용되고 있습니다.
Java 특징
1. 운영체제 독립성
운영체제 독립성 덕분에 하나의 코드로 다양한 플랫폼에서 애플리케이션을 배포할 수 있습니다. 이 기능을 가능하게 하는 것은 바로 JVM (Java Virtual Machine) 입니다. JVM은 Java 프로그램이 실행될 때 사용되는 가상 환경으로, Windows, macOS, Linux 등 다양한 운영체제에 맞는 JVM만 있으면 Java 코드는 하나의 코드로 다양한 플랫폼에서 실행될 수 있습니다.
2. 객체지향 언어
Java는 철저한 객체지향 프로그래밍 언어(OOP)입니다. 객체지향 프로그래밍은 객체들을 만들고, 객체들끼리 상호작용하며 프로그램을 만드는 기법입니다. 이러한 객체지향 설계는 코드의 재사용성을 높이고, 유지보수성을 개선합니다. Java는 객체지향 프로그래밍의 주요 특징인 캡슐화, 상속, 다형성, 추상화를 지원합니다.
- 캡슐화: 데이터와 메소드를 하나의 객체로 묶고, 외부에서 접근을 제한하여 객체의 내부 상태를 보호(은닉)합니다.
- 상속: 이미 작성된 기존 클래스(부모 클래스)의 속성과 메소드를 상속받아 새로운 클래스(자식 클래스)를 생성할 수 있습니다.
- 다형성: 동일한 메소드가 서로 다른 객체에서 다르게 동작할 수 있도록 하는 기능입니다. 이를 통해 인터페이스와 구현을 분리하여, 유연한 설계를 할 수 있습니다.
- 추상화: 객체의 세부 구현을 숨기고, 중요한 부분만 드러내어 설계할 수 있습니다.
3. 자동 메모리 관리
메모리 누수와 같은 오류를 줄여주며, 개발자가 로직 구현에 집중할 수 있게 해줍니다.
C나 C++ 같은 언어에서는 메모리를 직접 할당하고 해제해야 하지만, Java에서는 GC(Garbage Collector)가 자동으로 처리합니다. GC는 더 이상 참조되지 않는 객체를 탐지하여 메모리에서 제거하는 역할을 하기 때문에, 개발자는 메모리 누수와 같은 오류를 걱정하지 않고, 로직 구현에 집중할 수 있습니다. 물론 GC는 자동으로 실행되기 때문에, 프로그램의 성능에 영향을 미칠 수 있습니다. 따라서 성능이 중요한 애플리케이션에서는 GC 동작을 이해하고 최적화하는 것이 중요합니다.
4. 멀티쓰레드 지원
고성능이 요구되는 애플리케이션은 많은 경우 동시에 여러 작업을 처리해야 합니다. 이러한 작업을 위해 멀티쓰레딩을 사용합니다. 멀티쓰레딩이란 하나의 프로세스에서 여러 쓰레드가 동시에 실행되어 작업을 처리하는 방식입니다. 일반적으로 멀티쓰레딩은 운영체제에 따라 구현방법이 다르지만, Java를 사용하면 운영체제와 관계없이 Thread 클래스와 Runnable 인터페이스를 통해 멀티쓰레드를 구현할 수 있습니다.
5. 동적 로딩
동적 로딩이란 프로그램이 실행 중에 필요한 클래스를 동적으로 메모리에 로드하는 것을 의미합니다. 이를 통해 애플리케이션이 실행될 때 필요한 클래스만 로드할 수 있으며, 메모리 사용량을 최적화하고, 프로그램의 유연성을 높일 수 있습니다.
6. 라이브러리와 프레임워크
방대한 라이브러리와 프레임워크 지원으로 Java는 모바일, 웹 애플리케이션 등 다양한 분야에서 활용됩니다.
JVM
JVM(Java Virtual Machine) 위에서 Java로 작성된 애플리케이션이 실행되기 때문에 JVM에 대해 아는 것이 Java 개발 환경을 이해하는데 중요합니다. 일반 애플리케이션은 OS만 거치고 하드웨어로 바로 전달되기 때문에, 각 OS에 맞는 설치 파일을 따로 준비했어야 했습니다. Java 애플리케이션은 OS와 애플리케이션 사이에 JVM을 두어, Java 애플리케이션을 어떤 플랫폼을 사용하던지 하나의 코드만 작성하면 됩니다. (이때 JVM은 물론 Windows, macOS, Linux 등 OS에 맞는 JVM을 사용하여야 합니다.)
Java 애플리케이션은 JVM을 거치기 때문에, 다른 애플리케이션에 비해 느리다는 단점을 가지고 있습니다. 하지만 JIT (Just-In-Time) 컴파일러를 사용하여 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 빠르게 바로 변환해주고, 하드웨어가 발전함으로 자바 프로그램의 실행 속도는 문제가 되지 않게 되었습니다.
Java 프로그램 실행 과정
- 코드 작성: 개발자가 .java 파일에 Java 코드를 작성합니다.
- 컴파일: Java 코드는 javac 컴파일러(javac.exe)에 의해 .class 파일로 컴파일됩니다. 이 .class 파일은 바이트코드라는 중간 코드로 변환됩니다.
- 클래스 로딩: JVM은 프로그램 실행 중 필요한 .class 파일을 메모리에 로드합니다. 이때 Java의 동적 로딩 기능이 사용되어, 필요한 클래스만 메모리에 로드됩니다.
- 바이트코드 실행: JVM의 인터프리터(java.exe)가 바이트코드를 해석하여 운영체제(OS)에서 실행될 수 있는 명령어로 변환합니다. Java는 JIT(Just-In-Time) 컴파일러를 사용하여 바이트코드를 기계어로 즉시 변환, 실행 속도를 높입니다.
- Garbage Collector: 프로그램 실행되는 동안 JVM은 더 이상 참조되지 않는 객체를 메모리에서 제거하여 메모리 누수를 방지합니다.
JRE (Java Runtime Environment)
Java 프로그램을 실행하기 위한 환경입니다. JVM과 Java 표준 라이브러리를 포함하고, Java 애플리케이션을 실행하는데 필요한 모든 것을 제공합니다. 자바 프로그램 실행기인 java.exe를 포함하고 있습니다.
JDK (Java Development Kit)
Java 애플리케이션을 개발하고 실행하기 위한 도구 모음입니다. JRE와 함께 컴파일러, 디버거, 인터프리터 등의 개발 도구가 포함되어 있습니다. 즉 JDK는 Java 애플리케이션을 작성, 컴파일, 디버그하는 데 필요한 모든 도구를 제공합니다.
'Java' 카테고리의 다른 글
Java 조건문과 반복문: if, switch, for, while 그리고 break와 continue (0) | 2024.09.10 |
---|---|
Java 변수, 데이터 타입, 리터럴과 상수 차이 (0) | 2024.09.10 |
Java Apache POI로 엑셀(Excel) 파일 조작하기 (0) | 2023.07.06 |
Java 리플렉션(Reflection API): 동적 코드 조작과 메타프로그래밍을 위한 Refelction API (0) | 2023.07.05 |
Java 어노테이션(@annotation)을 활용한 커스텀 메타데이터 만들기 (0) | 2023.07.05 |