객체지향적으로 프로그래밍 하기 위해 여러 언어적 지원을 하고 있다 (캡슐화, 상속, 추상화, 다형성 등)
객체지향 패러다임의 특성상 비교적 이해하고 배우기 쉽다 (C와 C++ 비교 시)
인터프리터 언어이다.
컴파일 언어인 동시에 인터프리터 언어이다.
텍스트 소스를 컴파일 하여 2진 파일(클래스 파일)로 만든 다음 자바 런타임 클래스 파일을 인터프리트 하면서 실행한다.
시스템에 무관한 2진 파일을 만듦으로써 자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 얻을 수 있다.
Java의 장점
이식성이 높다.
서로 다른 실행환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다.
자바는 자바 실행환경(JRE))이 설치 되어 있는 모든 운영체제에서 실행이 가능하다.
메모리를 자동으로 관리한다.
C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 한다. 만약 이 작업을 성실하게 해주지 않는다면 프로그램은 불안전해지고 갑자기 다운되는 현상을 겪을 수도 있다.
자바는 개발자가 직접 메모리에 접근할 수 없으며 메모리는 자바가 직접 관리한다.
객체 생성 시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 객체를 제거한다.
덕분에 개발자는 메모리 관리의 수고를 덜고, 핵심 기능 코딩에 집중할 수 있다.
멀티 스레드 구현이 쉽다
운영체제에 따라 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제에 상관없이 멀티 스레드를 쉽게 구현할 수 있다.
동적 로딩을 지원한다.
실행 시에 모든 클래스가 로딩되는 것이 아니라 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점을 지닌다.
애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.
분산환경을 지원한다.
자바에는 TCP/IP 라이브러리가 기본적으로 포함되어 있다.
또한 http와 htp 프로토콜을 기본적으로 지원한다.
오픈소스 라이브러리가 풍부하다.
자바는 오픈소스 언어이고 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.
고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면 애플리케이션을 다시 컴파일 할 필요가 있다.
따라서 유지보수를 쉽고 빠르게 진행할 수 있다.
Java의 단점
비교적 속도가 느리다.
자바는 한 번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해 기계어로 번역되고 실행하는 과정을 거치기 때문에 C나 C++의 컴파일 단계에서 만들어지는 완전한 기계어보다 속도가 느리다. 그러나 하드웨어의 성능 향상과 바이트 코드를 기계어로 변환해주는 JIT 컴파일러 같은 기술 적용으로 JVM의 기능이 향상되어 속도의 격차가 많이 줄어들엇다.