[Java] 자바의 특징
공부를 시작한 이유
요즘 코딩 테스트와 스프링 서버 개발을 공부하고 있다.
두 과목 모두 자바를 기반으로 하다보니 자바의 핵심 개념을 한번 정리하는게 좋을 것 같았다.
자바는 이미 학교에서 배웠기 때문에, 세세하게 모든 내용을 공부하기보다 핵심 개념과 부족한 개념을 채우는 방향으로 공부할 계획이다.
자바의 정석 3rd Edition을 가지고 공부하려고 한다.
자바의 특징
- 운영체제에 독립적
자바는 자바가상머신(JVM)을 사용하기 때문에 프로그램은 운영체제와 상관없이 JVM과 소통을 하고, JVM이 컴퓨터의 OS에 맞게 코드를 최종 변환시켜준다.
그러므로, 자바로 작성된 프로그램은 운영체제와 하드웨어와 상관없이 실행가능하다.
"한번 작성하면 어디서든 실행된다.(Write once, run anywhere)"
- 객체지향언어
자바는 객체지향언어(Object-oriented-language)이다.
객체지향의 특징인 상속, 캡슐화, 다형성을 잘 반영한 순수한 객체지향언어이다.
- 비교적 배우기 쉽다
C++의 문법과 small talk이라는 객체지향 언어의 문법을 참고하여 만든 언어이다.
기존 언어의 복잡한 문법을 잘 다듬어서 가져왔기 때문에 배우기 쉽다.
- 자동 메모리 관리
자바로 작성된 프로그램이 실행되면, 가비지 컬렉터(Garbage collector)가 자동적으로 메모리를 관리해준다.
프로그래머가 수동으로 메모리를 관리하지 않아도 된다.
- 네트워크와 분산처리를 지원
인터넷과 대규모 분산 환경을 염두에 두었기 때문에 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해
네트워크 프로그램을 빠르고 쉽게 개발할 수 있다.
- 멀티쓰레드 지원
일반적으로 멀티 쓰레드(multi-thread)는 사용되는 운영체제에 따라 구현방법과 처리 방식이 다르다.
그러나 자바에서는 시스템과 상관없이 멀티쓰레드 프로그램을 구현할 수 있다.
관련된 라이브러리(Java API)가 제공되므로 쉽게 구현 할 수 있다.
여러 쓰레드에 대한 스케쥴링(scheduling)은 자바 인터프리터가 담당한다.
- 동적 로딩(Dynamic Loading) 지원
보통 자바 애플리케이션은 여러 클래스로 이루어져있다.
자바는 동적 로딩을 지원하기 때문에, 실행시에 모든 클래스가 로딩되지 않고,
필요한 시점에 클래스를 로딩한다.
일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일 하지 않아도 되며,
애플리케이션의 변경이 발생해도 비교적 적은 작업만으로 처리할 수 있다.
JVM(Java Virtual Machine)
JVM은 '자바를 실행하기 위한 가상 컴퓨터'이다.
가상 기계(virtual machine)는 소프트웨어로 구현된 하드웨어를 의미한다.
가상 컴퓨터(virtual computer)는 실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터라는 뜻으로
컴퓨터 속의 컴퓨터라고 생각하면 된다.
일반 애플리케이션은 OS를 거치고 하드웨어로 전달되는데,
Java 애플리케이션은 먼저 JVM를 거치고 해당 기기의 OS에 맞게 코드를 변환해준다.
컴파일된 자바코드는 바이트코드라고 불린다.
일반 애플리케이션은 OS와 바로 소통하기 때문에 OS 종속적이지만
Java 애플리케이션은 JVM과 소통하기 때문에 OS 독립적이라는 것을 알 수 있다.