Java는 1995년 5월 Sun Microsystems가 출시한 Java 객체 지향 프로그래밍 언어 및 Java 플랫폼의 일반적인 이름입니다. James Gosling과 동료들이 공동으로 개발했으며 1995년에 공식적으로 출시되었습니다.
Java는 세 가지 시스템으로 나뉩니다.
2005년 6월에는 JavaOne 컨퍼런스가 열렸고 SUN은 Java SE 6을 출시했습니다. 이때까지 다양한 버전의 Java가 숫자 "2"를 제거하여 이름이 변경되었습니다. J2EE는 Java EE로 이름이 바뀌었고, J2SE는 Java SE로 이름이 바뀌었고, J2ME는 Java ME로 이름이 바뀌었습니다.
2009년에 Sun은 Oracle에 인수되었습니다.
2018년 오픈 소스 조직인 Eclipse Foundation은 JavaEE(Enterprise Edition)의 이름이 JakartaEE(Jakarta)로 변경될 것이라고 발표했습니다.
Java 언어의 구문은 C 언어 및 C++ 언어와 매우 유사하므로 대부분의 프로그래머가 쉽게 배우고 사용할 수 있습니다. 반면에 Java는 연산자 오버로딩, 다중 상속, 자동 캐스트 등 거의 사용되지 않고 이해하기 어렵고 혼란스러운 C++ 기능을 폐기합니다. 특히 Java 언어는 포인터가 아닌 참조를 사용합니다. 또한 프로그래머가 메모리 관리에 대해 걱정할 필요가 없도록 자동 메모리 재활용 관리 메커니즘을 제공합니다.
Java 언어는 클래스, 인터페이스, 상속과 같은 기본 요소를 제공합니다. 단순성을 위해 클래스 간 단일 상속만 지원하지만 인터페이스 간 다중 상속을 지원하고 클래스와 인터페이스 간 구현 메커니즘을 지원합니다(키워드는 Implements입니다). Java 언어는 동적 바인딩을 완벽하게 지원하는 반면 C++ 언어는 가상 함수에 대해서만 동적 바인딩을 사용합니다. 간단히 말해서 Java 언어는 순수한 객체 지향 프로그래밍 언어입니다.
Java 언어는 인터넷 응용 프로그램 개발을 지원합니다. 기본 Java 응용 프로그래밍 인터페이스 중에는 URL, URLConnection, Socket, ServerSocket 등 네트워크 응용 프로그래밍을 위한 클래스 라이브러리를 제공하는 네트워크 응용 프로그래밍 인터페이스(java net)가 있습니다. Java의 RMI(Remote Method Activation) 메커니즘은 분산 애플리케이션을 개발하는 중요한 수단이기도 합니다.
Java의 강력한 타이핑 메커니즘, 예외 처리, 자동 가비지 수집 등은 Java 프로그램의 견고성을 보장하는 중요한 요소입니다. 포인터를 폐기하는 것은 Java의 현명한 선택입니다. Java의 보안 검사 메커니즘은 Java를 더욱 강력하게 만듭니다.
Java는 일반적으로 네트워크 환경에서 사용됩니다. 이러한 이유로 Java는 악성 코드 공격을 방지하기 위한 보안 메커니즘을 제공합니다. Java 언어의 많은 보안 기능 외에도 Java에는 네트워크를 통해 다운로드된 클래스에 대한 보안 예방 메커니즘(클래스 ClassLoader)이 있습니다. 예를 들어 로컬 클래스가 동일한 이름으로 대체되는 것을 방지하기 위해 서로 다른 네임스페이스를 할당하고, 바이트 코드 검사, 보안 관리 메커니즘(SecurityManager 클래스)을 제공하면 Java 애플리케이션이 보안 센트리를 설정할 수 있습니다.
Java 프로그램(접미사 java가 있는 파일)은 Java 플랫폼에서 아키텍처 중립 바이트코드 형식(접미사 클래스가 있는 파일)으로 컴파일된 다음 이 Java 플랫폼을 구현하는 모든 시스템에서 실행될 수 있습니다. 이 접근 방식은 이기종 네트워크 환경 및 소프트웨어 배포에 적합합니다.
이러한 이식성은 아키텍처 중립성에서 비롯됩니다. 또한 Java는 각 기본 데이터 유형의 길이를 엄격하게 규제합니다. Java 시스템 자체도 이식성이 뛰어납니다. Java 컴파일러는 Java로 구현되고 Java 실행 환경은 ANSI C로 구현됩니다.
앞서 언급했듯이 Java 프로그램은 Java 플랫폼에서 바이트코드 형식으로 컴파일된 다음 이 Java 플랫폼을 구현하는 모든 시스템에서 실행될 수 있습니다. 런타임 시 Java 플랫폼의 Java 인터프리터는 이러한 바이트코드를 해석하고 실행하며, 실행 중에 필요한 클래스는 연결 단계에서 실행 환경에 로드됩니다.
해석된 고급 스크립팅 언어와 비교할 때 Java는 실제로 고성능입니다. 실제로 JIT(Just-In-Time) 컴파일러 기술의 발전으로 자바의 실행 속도는 점점 C++에 가까워지고 있다.
Java 언어에서 스레드는 Thread 클래스나 그 하위 항목(손자)이 생성해야 하는 특수 객체입니다. 일반적으로 스레드를 생성하는 방법에는 두 가지가 있습니다. 첫째, Thread(Runnable) 유형의 생성자를 사용하여 Runnable 인터페이스를 구현하는 개체를 스레드로 래핑하고, 둘째, Thread 클래스에서 하위 클래스를 파생시키고 개체인 run Method를 재정의합니다. 이 하위 클래스를 사용하여 생성된 스레드는 스레드입니다. Thread 클래스가 Runnable 인터페이스를 구현했기 때문에 모든 스레드에는 run 메서드가 있고 run 메서드에는 스레드에서 실행할 코드가 포함되어 있다는 점은 주목할 가치가 있습니다. 스레드의 활동은 일련의 메소드에 의해 제어됩니다. Java 언어는 다중 스레드의 동시 실행을 지원하고 다중 스레드 간의 동기화 메커니즘을 제공합니다(키워드는 동기화됨).
Java 언어의 설계 목표 중 하나는 동적으로 변화하는 환경에 적응하는 것입니다. Java 프로그램에 필요한 클래스를 실행 환경에 동적으로 로드하거나 네트워크를 통해 필요한 클래스를 로드할 수 있습니다. 이는 또한 소프트웨어 업그레이드를 용이하게 합니다. 또한 Java의 클래스에는 런타임 표현이 있으며 런타임 유형 검사를 수행할 수 있습니다.
Java 언어는 시스템 메모리가 1G 이상인지 확인하려고 합니다. 다른 도구는 다음과 같습니다.
위의 도구를 설치한 후 Java의 첫 번째 프로그램 "Hello World!"를 출력할 수 있습니다.
public class MyFirstJavaProgram { public static void main(String []args) { System.out.println("Hello World"); } }
다음 장에서는 Java 개발 환경을 구성하는 방법을 소개합니다.