Java 에 대한 기본적인 정리
Java 의 장점
1. 운영체제에 독립적
2. 객체지향 언어
3. 비교적 낮은 입문장벽
4. Garbage Collector
5. 네트워크와 분산처리
6. 멀티스레드 지원
7. Dynamic Loading 지원
운영체제에 독립적
java는 일종의 애뮬레이터인 JVM(= Java Virtual Machine)을 사용한다. 그렇기 때문에 java로 작성된 코드는 운영체제나 하드웨어가 아닌 JVM과만 통신이 이뤄지기 때문에 java 코드 관점에서는 운영체제나 하드웨어에 대한 차이 없이 동일한 java 코드를 사용할 수 있다. 운영체제가 해당 내용을 이해할 수 있도록 애플리케이션의 명령들을 변환하는 것은 JVM이 수행한다.
그렇기 때문에 java로 작성된 프로그램 자체는 운영체제에 독립적이지만, JVM은 운영체제에 종속적이며 그렇기 때문에 다양한 운영체제에 설치할 수 있는 다양한 버전의 JVM이 존재한다. 그렇기 때문에 java로 작성된 코드는 운영체제의 종류를 가리지 않고 일치하는 버전의 JVM만 설치되어 있다면 어디서든지 프로그램을 실행할 수 있다.
객체지향 언어
java는 OOP(= Object Oriented Programming language) 중의 하나로서 객체지향의 핵심개념인 inheritance, encapsulation, polymorphism이 잘 적용된 순수한 객체지향 언어에 해당한다. 이는 프로그래밍을 좀 더 실세계의 Object라는 개념으로 모델링 할 수 있다는 점에서 코드의 가독성을 높임과 동시에 코드의 유지 보수성을 높일 수 있어 많은 양의 코드로 동작하는 대형 프로그램 개발에 적합한 언어라고 할 수 있다. 실제로 java는 매우 많은 라인의 코드가 작성되어 동작하는 대형 프로그램의 개발에 많이 사용된다.
비교적 낮은 입문장벽
java는 많은 프로그래밍 언어들의 장점을 수용하고 복잡하고 불필요한 부분은 과감하게 제거함으로써 보다 이해하기 쉽고 간결한 코드를 작성할 수 있도록 하였다. 기존의 객체지향언어들은 그 구조가 복잡하고 코드가 다소 이해하기 어려워 사용자 층을 크게 확보할 수 없었다는 한계점을 가지고 있었지만 java가 이러한 문제들을 상당수 해결함으로서 객체지향언어의 입지 확대에 큰 기여를 했다고 볼 수 있다.
Garbage Collector
C언어와 같은 프로그래밍 언어와 달리 Java는 "Garbage Collector"라는 자동메모리 관리 기능을 제공한다. C언어의 경우 메모리 공간의 할당과 반납을 개발자가 신경써서 확인해주지 않으면 Memory leak이 발생한다. 하지만 java가 가지는 이 Garbage Collector는 이러한 memory leak에 의한 문제가 발생하기 이전에 자동으로 메모리 공간을 회수함으로서 이러한 문제를 방지한다. 이로서 개발자는 메모리 공간 관리에 대한 염려 없이 로직에만 집중할 수 있다는 장점이 있다.
네트워크와 분산처리
이전에 언급했듯이 java는 대형 프로그램 작성을 염두해두고 개발되었으며 이를 위한 인터넷, 대규모 분산처리 환경을 고려하여 이를 위한 다양한 네트워크 프로그래밍을 위한 라이브러리(API)를 제공하여 비교적 쉽게 네트워크 관련 프로그램을 쉽게 개발할 수 있다.
멀티스레드 지원
java의 경우 이미 잘 만들어져있는 라이브러리(API)를 사용해서 멀티스레딩을 구현할 수 있다. 이 때, 각 스레드들에 대한 스케쥴링은 java interpreter가 수행하게 된다.
Dynamic Loading 지원
java는 여러 개의 class로 구성되는 데 java는 Dynamic Loading을 지원하여 실행 시 모든 class를 한 번에 로딩하는 것이 아니라 특정 시점에 필요한 class만을 로딩하여 사용할 수 있다. 그렇기 때문에 전체 프로그램에서 특정 class의 code가 변경되었다고 하더라도 전체 프로그램 source code를 다시 컴파일할 필요성이 없으며 그렇기 때문에 프로그램에서 일부 수정이 발생하더라도 비교적 적은 부담으로 이를 전체 프로그램에 반영할 수 있다는 장점이 있다.
JVM에 의해 발생하는 단점
코드 실행 속도가 C나 C++와 같은 언어들에 비해 느리다.
이전에 언급한 것처럼 JVM이 java로 작성된 애플리케이션 프로그램과 OS 사이에 위치함으로서 애플리케이션 프로그램 코드를 OS로부터 독립시켰다는 큰 장점이 있지만 반대로 단점이 존재한다. 바로 코드의 실행속도가 상대적으로 느리다는 것이다.
프로그래밍 언어로 작성된 프로그램이 실행되기 까지의 과정을 생각해보자. 기존 방식대로 라면 아래와 같이 애플리케이션 프로그램이 OS와 통신하고 OS가 하드웨어와 통신하여 애플리케이션 프로그램의 로직을 실행하는 구조였다.
하지만 아래와 같이 그 사이에 JVM이 들어감으로서 java로 작성된 프로그램을 실행하기 위해서는 우선 java code를 JVM이 이해할 수 있는 "Byte Code"로 1차 번역을 하고, 그 이후에 OS를 거쳐 컴퓨터가 이해할 수 있는 Binary Code로 변환되기 때문에 상대적으로 속도가 느리다.
하지만 최근에는 Byte Code를 바로 Machine Language로 번역하는 JIT 컴파일러와 향상된 최적화 기술이 적용되면서 기존에 java의 치명적인 단점으로 지적받던 느린 실행속도 문제를 많이 해결했다고 한다.
'Web Backend > Java' 카테고리의 다른 글
Class와 Object (0) | 2021.06.29 |
---|---|
OOP(Object Oriented Programming language) 개념 (0) | 2021.06.29 |
Optional (0) | 2021.06.28 |
enum (0) | 2021.06.28 |
Map & HashMap의 차이점 (0) | 2021.06.28 |
댓글
이 글 공유하기
다른 글
-
Class와 Object
Class와 Object
2021.06.29 -
OOP(Object Oriented Programming language) 개념
OOP(Object Oriented Programming language) 개념
2021.06.29 -
Optional
Optional
2021.06.28 -
enum
enum
2021.06.28