티스토리 뷰

Java

[Java] 자바의 특징

woo'^'chang 2022. 11. 26. 17:59

1. 운영체제에 독립적이다.

운영체제와 하드웨어랑 직접적으로 통신하는 일반 애플리케이션과 달리 자바 애플리케이션은 JVM을 거쳐 운영체제와 하드웨어랑 통신합니다. 따라서 자바 애플리케이션은 한 번만 작성되면 어디서든 실행될 수 있기에 Write Once, Run Anywhere라고 표현하기도 합니다.

 

하드웨어마다 사용하는 기계어가 다르고, 운영체제마다 사용하는 API 종류, 메모리 관리 기법 등이 다르기에 일반적인 애플리케이션의 경우 플랫폼에 종속적일 수밖에 없습니다. 자바 애플리케이션은 JVM을 통해 플랫폼에 알맞은 기계어로 변환되기에 자바 애플리케이션 자체는 플랫폼에 종속적이지 않습니다. 하지만 JVM은 운영체제에 맞게 애플리케이션을 변경해야 하기에 플랫폼에 종속적입니다.

 

결국 JVM이라는 중간 매개체가 있기에 자바는 운영체제에 독립적이라고 할 수 있습니다.

2. 객체지향 언어이다.

자바는 객체지향 프로그래밍 언어 중 하나로 객체지향 개념의 특징인 상속, 캡슐화, 다형성이 잘 적용되어있는 언어입니다.

  • 상속 : 객체들 간의 관계를 구축하는 것
    • ex) 부모 클래스, 자식 클래스
  • 캡슐화 : 실제 구현 내용을 감추는 것
    • ex) private 접근 제어자를 통해 내부에서만 접근
  • 다형성 : 하나의 객체가 여러 타입을 가질 수 있는 것
    • ex) 부모 클래스를 통해 자식 클래스를 참조

3. 자동 메모리 관리 (Garbage Collection)

가비지 컬렉터(Garbage Collector)가 자동으로 메모리를 관리해 주기에 프로그래머는 별도로 메모리를 관리하지 않아도 됩니다. C++ 같은 경우 malloc(), free()를 통해 수동으로 메모리를 관리하는 것에 비해 자바에는 해당 함수들이 존재하지 않습니다.

 

메모리 관리를 가비지 컬렉터에게 맡겨 프로그래머는 핵심 로직에 집중할 수 있습니다. 하지만 가비지 컬렉터에 의해서만 메모리가 관리되기 때문에 직접 관리하는 것에 비해 비효율적인 면도 존재합니다.

4. 네트워크와 분산처리를 지원한다.

인터넷과 대규모 분산 환경을 염두에 두었기에 API를 통해 다양한 네트워크 프로그래밍을 지원합니다. 따라서 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있습니다.

5. 멀티스레드를 지원한다.

멀티스레드 구현과 처리 방법 또한 운영체제마다 다릅니다. 하지만 자바의 독립적인 특징으로 인해 운영체제에 상관없이 구현할 수 있습니다. 멀티스레드도 관련 라이브러리를 제공하기에 구현이 쉬우며 여러 스레드에 대한 스케쥴링을 인터프리터가 담당하게 됩니다.

6. 동적 로딩(Dynamic Loading)을 지원한다.

자바 애플리케이션 실행 시 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하는 것이 동적 로딩입니다. 그 외에도 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되고 애플리케이션의 변경사항이 발생해도 비교적 적은 작업으로 처리할 수 있는 유연한 애플리케이션을 작성할 수 있습니다.

 

필요한 시점에 클래스를 가져오는 것, JVM을 거쳐 실행되는 것으로 인해 자바의 단점은 속도 문제가 대표적이었지만, 바이트코드를 하드웨어의 기계어로 바로 변환해주는 JIT(Just In Time) 컴파일러의 도입으로 속도 문제는 상당히 개선되었다고 합니다.

'Java' 카테고리의 다른 글

[Java] JDBC 개념 정리  (4) 2023.06.08
[Java] 상속을 언제 사용해야 할까  (8) 2023.03.26
방어적 복사에서 clone은 안전한가  (0) 2022.07.12
Java 정규표현식  (0) 2022.06.23
Java Enum  (0) 2022.06.16
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday