1. 운영체제에 독립적
- 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM(Java Virtual Machine)하고만 통신하기 때문이다.
- JVM이 자바 응용프로그램으로 부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달함.
- JVM은 운영체제에 종속적임.
(+) JVM의 2가지 기본 기능은
1) 자바 프로그램이 운영체제에 독립적이게 하는 것(Write once, run anywhere)
2) 프로그램 메모리를 관리하고 최적화 하는 것(Garbage Collection 프로세스를 통해 메모리 관리)
2. 객체지향언어(Object-oriented programming laguage)
- 다음과 같은 특징을 가짐.
1) 캡슐화 : 변수와 함수를 하나의 단위로 묶는 것
(+) 정보 은닉, 모듈 간 결합도 하락으로 인한 유연함과 유지보수성 상승 등 장점
(+) 자바에서는 이러한 데이터 번들링이 class를 통해 구현됨
2) 상속: 상위 클래스의 멤버를 하위 클래스가 이어받을 수 있음
3) 다형성: 한 객체가 다른 여러 상태와 행위로 재구성될 수 있음
ex) 오버라이딩(overriding): 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재구성해서 사용하는 기술
오버로딩(overloading): 매개변수의 유형과 개수를 다르게해 같은 이름의 메서드를 여러 개 가질 수 있게하는 기술
3. 자동 메모리 관리 (Garbage Collection)
- 실행 중인 JVM 내부에서 일어나며 자바 프로그램에서 사용되지 않는 메모리를 지속적으로 찾아내서 제거
- 자동으로 메모리를 관리하기에 다소 비효율적인 면이 있을 수도 있지만, 메모리를 체크하고 반환하는 일을 자동으로 해주기에 프로그래머가 프로그래밍에 집중 할 수 있음
4. 네트워크와 분산처리 지원
- 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발 할 수 있도록 지원
5. 멀티쓰레드(Multi-thread) 지원
- 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과 관계없이 구현가능하며, 관련된 라이브러리(Java API)가 제공되므로 제공이 쉬움
- 자바 인터프리터가 여러 쓰레드에 대한 스케줄링(scheduling)을 담당
(+) 멀티쓰레드: 하나의 프로세스 내에서 둘 이상의 쓰레드가 동시에 작업을 수행하는 것
cf)일반적으로 하나의 프로세스는 하나의 쓰레드를 가지고 작업을 수행함
- 각 쓰레드가 자신의 속한 프로세스의 메모리를 공유하므로 시스템 자원의 낭비가 적음
- 하나의 쓰레드가 작업할 때 다른 쓰레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아짐
6. 동적 로딩(Dynamic Loading) 지원
- 동적 로딩: 프로세스가 시작될 때, 그 프로세스의 주소 공간 전체를 메모리에 올려놓는 것이 아니라 필요한 루틴이 호출되는 시점에 해당 루틴을 메모리에 적재하는 방식
- 자바는 동적 로딩을 지원하여 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용 가능
- 또한, 일부 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일하지 않아도 되고, 유연한 애플리케이션을 작성할 수 있음
'Programming Language > Java' 카테고리의 다른 글
[Java] 특수 문자 다루기 (0) | 2023.12.30 |
---|---|
[Java] 출력 (1) | 2023.12.30 |
[Java] 변수 (0) | 2023.12.30 |
[Java] public static void main(String[] args) 분석 (0) | 2023.12.30 |
[Java] JDK와 JRE (0) | 2023.12.30 |