1. 플랫폼 독립성
바이트코드 형태로 변환된 후 JVM(Java Virtual Machine)에서 실행되므로, OS와 상관 없이 동작할 수 있다.
바이트코드는 xxx.java 파일을 컴파일한 xxx.class 형태의 클래스 파일이다.
이게 왜 특징이냐?라고 생각이 들텐데?!
자바 이전의 언어 소스들은 각 언어 체계에 따라 컴파일러가 있고 컴파일러를 통해 어셈블리어로 변환 한다.
변환된 어셈블리어를 기계가 읽을 수 있게 어셈블러를 통해 기계어로 변환하여 하드웨어가 읽은 수 있게된다.
여기서 기존의 소스 코드 공유 방식에서 자바와 차이가 나타난다.
하드웨어, 제조사마다 기계어의 설계가 다르다는 것이다.
예를 들어, A라는 장비에 B 운영체제에서 C언어로 개발한 소스(C)가 있다.
이 소스를 A'라는 장비에 B' 운영체제에 소스(C)를 넘겨줘야한다.
운영체제가 다르다면, 소스(C)의 컴파일이 다를 수 있다.
위 예시에서 소스를 옮겨 사용할 때 운영체제에 따라 컴파일러도 같이 신경을 써줘야한다.
다시, 자바로 돌아가보자.
자바는 JVM이 개발자와 커널사이에서 중개자 역할을 해준다.
즉, 개발자는 어떤 환경에서 개발해도 컴파일까지 신경쓰지 않아도 된다.
✅ 개발자 입장에서는 플랫폼 독립성을 가지는 것처럼 보이는 것이다.
2. 객체지향 프로그래밍(OOP) 지원
프로그램 설계 방법론 일종의 명령형 프로그래밍에 속한다.
데이터를 단순히 순차적으로 처리하는 것이 아닌
객체(Object)라는 기본 단위로 나누고 이들의 상호 작용으로 서술하는 방식이다.
객체는 추상적 개념이며 사용할 때는 개념을 구현하여 이들끼리 엮어 개발이 진행된다.
OOP의 4가지 특징
객체와 추상적인 개념을 인지하고 접근하면 아래 4가지를 쉽게 이해가 가능하다.
- 추상화
- OOP의 가장 원초적 개념이며 객체끼리 중복이 되는 부분은 하나의 객체로 다시 만들 수 있다.
- 코드의 재사용이 용이해진다.
- 캡슐화
- 외부에서 접근하지 못하도록 보호하는 개념으로 변경의 영향을 통제하기 위함이다.
- 상속
- 상위 객체의 개념을 하위 객체로 전달할 수 있다.
- 하위에서 상위로 반대로는 안된다.
- 다형성
- 여러가지 형태로 변형이 가능하다는 의미이며 상위 객체의 기능을 하위 객체에서 기능을 재정의하여 사용이 가능하다.
✅ 즉, 유지보수성과 확정성이 용이하다.
3. 메모리 관리
개발자가 메모리 관리할 필요 없이 JVM이 GC(Garbage Collector)를 통해 자동으로 메모리를 정리한다.
4. 멀티스레딩 지원
우선순위
동시성과 병렬성으로 실행이 가능하다.
동시성: 1개의 코어로 스레드마다 교차하면서 실행
병렬성: 스레드가 각각의 독립적인 코어가 할당되어 작업이 실행
현실적으로는 여러 코어와 여러 스레드를 사용함으로 동시성과 병렬성 둘 다 적용된다.
이를 제어하는 것이 운영체제에서 하는 스케줄링이다.
스케줄링 방식은 크게 우선순위 방식과 순환 할당 방식이 있다.
동기화
멀티 스레드에서 객체를 공유하며 작업하는 경우 동기화가 필요하다.
5. 강력한 표준 라이브러리 제공
자바 API에는 데이터 구조, 네트워킹, 입출력, 동시성 등 다양한 기능이 포함되어 있어 효율적인 개발이 가능하다.
'Java' 카테고리의 다른 글
REST API 설계, GET 방식과 보안이슈 (0) | 2025.03.25 |
---|---|
Java 버전별 변천사 ( Java 6 ~ ) (2) | 2025.03.15 |
클래스 초기화 순서 (0) | 2025.03.13 |
OpenJDK vs Oracle JDK 차이점 (1) | 2025.03.10 |
[JAVA] JCP, JSR, TCK란? 자바 표준의 개발 과정과 역할 (0) | 2025.03.10 |