썬 마이크로시스템즈에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향적 프로그래밍 언어이다.
2010년에 썬이 오라클 사에 인수되면서 오라클사의 제품이 되었다.
JVM이라는 자바가상머신, 일종의 에뮬레이터를 이용하기 때문에 운영체제에 영향을 받지 않는다.
자바 응용프로그램은 JVM하고만 통신하고 JVM이 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.
객체지향개념의 특징인 상속, 캡슐화, 다향성이 잘 적용되어있다.
기본 구문은 C++, 객체지향관련 구문은 스몰톡(small talk)라는 객체지향언어에서 가져왔다. 장점만 취하고 단점은 제거하여 단순화함으로 쉬운 코드를 작성할 수 있게끔 하였다.
가비지 컬렉터(Garbage Collector)란 프로그래머가 사용하지 않는 메모리를 체크하고 반환하는 일을 자동적으로 해준다. 이는 비효율적인 면도 있지만 프로그래머가 메모리 관리에 신경쓰지 않고 프로그래밍에만 집중할 수 있게 해주는 장점이 있다.
다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.
멀티쓰레드의 지원은 운영체제에 따라 구현방법, 처리 방식이 다르다. 하지만 자바는 시스템과 관계없이 구현이 가능하며 관련된 라이브러리(Java API)가 제공되므로 구현이 쉽다.
여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당하게 된다.
자바 어플리케이션은 여러 개의 클래스로 구성되어 있다. 이 때 동적로딩을 지원하므로 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다.
그 외에도 일부 클래스가 변경되어도 전체 어플리케이션을 다시 컴파일하지 않아도 된다.
Hello.java -> 컴파일(javac.exe) -> Hello.class 생성 -> 실행(java.exe)
하나의 소스파일에 하나의 클래스만을 정의하는 것이 보통이다.
둘 이상의 클래스를 정의하는 것도 가능하지만 소스파일의 이름은 public class
의 이름과 일치해야 한다.
public class
가 없다면 소스파일 내의 어떤 클래스의 이름으로 해도 상관없다.
참고
Java의 정석 3판