쉬운 난이도
: 자바는 기본적으로는 C와 C++의 문법을 차용한 언어이다. 그러나 C와 C++에서 가장 이해하기 어려운 수준인 포인터, 다중 상속 등의 개념을 없애 문법적인 난이도를 매우 낮췄다. 따라서 C 혹은 C++를 사용해본 프로그래머라면 자바에 매우 쉽게 적응할 수 있을 것이다.
Garbage Collector
: 컴퓨터는 메모리라는 어떤 저장 공간을 가지고 있다. 현실에서도 저장할 공간은 다양한 물건이 오고 가며 지저분해지기에 어느 순간 정리를 해야 하는 것처럼 프로그래밍을 할 때 역시 메모리에 다양한 데이터 값을 넣고 삭제하는 작업을 하면서 메모리가 지저분해지는 경우가 발생한다. 이런 경우 자바에서는 Garbage Collector라는 자동 메모리 정리 기능을 사용한다. Garbage Collector는 프로그램이 실행 중에 사용하지 않는 메모리를 자동 해제한다. 이 기능 덕분에 자바 개발자는 메모리 관리를 염두에 두지 않고 프로그램을 개발할 수 있다.
JVM (Java Virtual Machine)
: Linux 운영체제에서 개발한 C 프로그램은 Windows 운영체제에서 실행했을 때 실행되지 않는다. 반대의 경우도 마찬가지이다. 이는 코드로 작성된 프로그래밍 언어를 해석하는데 사용되는 도구의 차이에서 발생한다. 소스 코드에서 프로그램으로 만들어지는 과정 중 컴파일링Compiling이라는 과정을 거치게 되는데 이는 사람에 친화적인 컴퓨터 언어를 운영체제Linux Windows 등가 이해할 수 있는 기계어로 번역되는 과정을 지칭한다. 즉 컴파일링을 거쳤을 때 Linux용 C 프로그램 소스 코드는 Linux 기계어로 Windows용 C 프로그램 소스 코드는 Windows 기계어로 번역되기 때문에 서로 다른 운영체제에서는 사용할 수 없다. 이런 소스코드의 언어를 Native Language라고 한다. 대표적인 예로 C언어가 있다.
하지만 자바는 다릅니다. 자바는 JVM이 중간 다리 역할을 한다. 운영체제와 프로그램 사이에서 프로그램이 동작하고 있는 운영체제가 무엇인지 판단한 뒤 해당 운영체제의 기계어로 다시 번역해주기 때문에 운영체제와 상관없이 프로그램을 실행할 수 있다.
■ 자바는 객체지향 언어이다.
객체지향 프로그래밍(OOP, Object Oriented Programming)이란 프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결하여 전체 프로그램을 완성하는 것을 말한다. 객체를 만들기 위해서는 설계도인 클래스를 작성하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 객체지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.
■ 이식성이 높다.
서로 다른 실행환경을 가진 시스템간에 프로그램을 옮겨 실행할 수 있는것을 말한다.
자바는 자바 실행환경(JRE)이 설치 되어 있는 모든 운영체제에서 실행이 가능하다.
■ 인터프린터 언어이다.
컴파일 언어인 동시에 인터프리터 언어이다.
텍스트 소스를 컴파일 하여 2진 파일(클래스 파일)로 만든 다음 자바 런타임이 클래스 파일을 인터프리트하면서 실행한다.
시스템에 무관한 2진 파일을 만듬으로써 자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 얻을수 있다.
■ 메모리를 자동으로 관리한다.
C++은 메모리에 생성된 객체를 제거하기 위해 개발자가 직접 코드를 작성해야 한다. 만약 이 작업을 성실하게 해주지 않는다면 프로그램은 불완전해지고 갑자기 다운되는 현상을 겪을 수도 있다.
자바는 개발자가 직접 메모리에 접근할 수 없으며 메모리는 자바가 직접 관리한다.
객체 생성시 자동으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면 쓰레기 수집기(Garbage Collector)를 실켜 자동으로 사용하지 않는 객체를 제거한다.
덕분에 개발자는 메모리 관리의 수고를 덜고, 핵심 기능 코딩에 집중할 수 있다.
■ 멀티 스레드 구현이 쉽다.
운영체제에 따라 멀티 스레드를 구현하는 방법이 다르지만, 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하므로 운영체제에 상관없이 멀티 스레드를 쉽게 구현할 수 있다.
■ 동적 로딩을 지원한다.
실행시에 모든 클래스가 로딩되는것이 아니라 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점을 지닌다.
애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 만들 수 있다.
■ 분산환경을 지원한다.
자바에는 TCP/IP 라이브러리가 기본적으로 포함되어 있다.
또한 http 와 htp 프로토콜을 기본적으로 지원한다.
■ 오픈소스 라이브러리가 풍부하다.
자바는 오픈소스(Open Source) 언어이고 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.
고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면 애플리케이션을 다시 컴파일할 필요가 없다.
따라서 유지보수를 쉽고 빠르게 진행할 수 있다.
단점
자바는 실행을 위해 자바 가상 머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느리다.
자바는 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해 줘야 한다는 불편함이 있다.
자바는 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편이다.