자바의 주요 특징, 에디션 및 변천사

자바(Java) 언의의 탄생

  • 1991년 Sun Microsystem사의 James Gosling Patrick Naughton, Chris Warth, Ed Frank Mike Sheridna에 의해서 개발되었다.
  • 1991년에 오크(Oak)라는 이름으로 불렸으나 1996년에 발표된 1.0.2 버전부터 자바(Java)라는 이름을 사용하게 된다.
  • World Wide Web의 출현으로 자바는 컴퓨터 언어 설계를 하는데 더욱 확발하게 발전하게 되었다.
  • 이후 2009년에 썬 마이크로시스템즈사가 오라클과 인수 합병됨에 따라 자바 또한 오라클로 소유권이 넘어간다.

프로그래밍 언어 : 자바

  • 단순(Simple)하다
  • 객체지향(Object-oriendted)적이다
  • 분산(Distributed)환경의 응용에 적합하다
  • 인터프리터(Interpreter)에 의해 실행된다.
  • 견고(Robust)한 기능을 제공한다.
  • 안전(Secure)하다
  • 구조중립(Architecture-neutral)적이고 이식성(Potable)이 높다.
  • 높은 성능(High-performance)를 제공한다.
  • 다중 스레드(Multithread)를 제공한다.
  • 동적(Dynamic)이다.

Java 언어의 주요 특징

객체 지향 언어

자바는 완벽한 객체 지향 언어이다.

객체 지향(Object oriented) 이란, 어플리케이션 중에서 취급하는 대상을 오브젝트(Object. 사물)라고 생각하여 그 조합에 의해 기능을 만들어 가는 방법을 말한다. Java뿐만 아니라 많은 프로그래밍 언어가 객체 지향에 따라 설계되었다.
즉, Java를 배우므로써 다른 언어로도 활용할 수 있는 범용적인 지식을 얻을 수 있다.

플랫폼 독립적

플랫폼에 독립적인 프로그램을 작성할 수 있다.

Java 프로그램은 Java 가상 머신 에서 동작하는 중간 코드로 변환된 후에 동작한다. 플랫폼 고유의 네이티브 코드를 생성하지 않기 때문에, 어플리케이션이 특정의 플랫폼에 의존하지 않는다. 그 플랫폼에 대응하는 가상 머신만 있으면, Java의 프로그램은 어디에서라도 동한니다. 이 성질을 “Write Once, Run Anywhere” 라고 한다.

가비지 컬렉터가 메모리를 자동 관리

Java에서는 가비지 콜렉터(Garbage Collection) 라고 하는 구조가 준비되어 있어 사용되지 않게 된 메모리를 자동으로 해제해 준다. 그러기 때문에 메모리의 해제하는 것을 잊었다고 해서 메모리 누수라고 하는 문제도 원칙적으로 발생하지 않는다. 또한 개발자가 메모리의 해방을 의식한 코드를 기술하지 않아도 되므로 개발 생산성이 향상된다.

자바 스크립트와 다른 언어

이름이 비슷해서 혼동되기 쉽지만, JavaScript와는 완전히 다른 언어이다. Java는 전용 Java 가상 머신에서 실행되지만 JavaScript는 주로 브라우저에서 사용하는 간단한 스크립팅 언어이다.

JVM(Java Virual Machine)

자바 바이트 코드를 기계어로 사용하는 컴퓨터를 자바 가상 머신이라 한다.

  • 스택 영역(Rumtime stack)
  • 동적 할당 메모리 영역 (Garbage Collection Heap)
  • 상수 & Method 영역 (Constant & Code Segment)
  • Register 영역 (Process Register)

자바(Java) 에디션 종류

Java는 목적에 따라 다음 에디션을 제공한다.

Java SE(Java Platform - Standard Edition)

  • Java의 기본이 되는 에디션
  • Desktop이나 Server에서 Java Application/Applet등을 개발, 배치, 실행 할 수 있는 환경을 제공(Software Platform)
  • Compiler, Interpreter, 표준 API 등 제공한다.
  • Java SE Development Kit (JDK)

Java EE(Java Platform - Enterprise Edition)

  • 서버측 개발을 위한 기업용 에디션
  • Java SE를 기반으로 대규모 기업용 서버를 구축하고, 실행 할 수 있는 환경을 제공한다.
  • Web Application Server(GlassFish)와 Servlet, JSP, JDBC, DataSource, JPA, JTA, JNDI, RMI, EJB, JMS 등 다수의 API 제공한다.
  • Java EE SDK

Java ME(Jaava Platform - Micro Edition)

  • 임베디드 시스템에 사용되는 에디션
  • 휴대폰, PDA 등에서 동작하는 무선 어플리케이션을 개발하고 실행할 수 있는 환경을 제공한다.
  • Compiler, Emulator, 표준 API 등 제공한다.
  • Java ME SDK

Java SE 는 Java 언어의 기본 기능인 API를 제공하는 에디션이다. Java EE를 실행하려면 Java SE가 필수이다. Java ME는 임베디드 시스템에서의 사용을 가정하고 Java SE의 서브세트와 호환되지 않지만 최소한의 기능을 제공한다. 여기에서 다루는 것은 Java SE의 기능이다.

Java의 변천

다음은 JavaSE의 대략적인 역사이다.

Java 버전

버전 시기 주요 신기능 등
JDK 베타 1995년
JDK 1.0 1996년 1월 23일 초기 버전
JDK 1.1 1997년 2월 19일 국제화 대응, JDBC API
J2SE 1.2 1998년 12월 8일 컬렉션 프레임워크, 스윙, 리플렉션
J2SE 1.3 2000년 5월 8일 HotSpot
J2SE 1.4 2002년 2월 6일 정규식, 로깅, New I/O, assert
J2SE 5.0 2004년 9월 30일 제네릭스, 오토박싱, enum형, 확장 for명령
JavaSE 6 2006년 12월 11일 유니코드 정규화, JDBC 4.0
JavaSE 7 2011년 7월 28일 try-with-resources 구문, New I/O.2, 다이아몬드 구문
JavaSE 8 (LTS) 2014년 3월 18일 람다 식, Stream API, Date-Time API
Java 9 2017년 9월 21일 모듈, JShell, 리액티브 스트림
Java 10 2018년 3월 20일 지역 변수의 유형 추론
Java 11 (LTS) 2018년 9월 25일 HttpClient, 단일 Java 파일 실행
Java 12 2019년 3월 19일 switch 식(Preview)
Java 13 2019년 9월 17일 텍스트 블록(Preview)
Java 14 2020년 3월 17일
Java 15 2020년 9월 15일
Java 16 2021년 3월 16일
Java 17 (LTS) 2021년 9월 14일
Java 18 2022년 3월 22일

5.0은 릴리스 처음에는 버젼 1.5라고 불렸지만, 언어 사양등이 크게 변화되었기 때문에, 나중에 5.0에 개정되었다. 그리고, 5.0까지는 J2SE(Java2 Platform, Standard Edition)라고 불렸지만, 6의 릴리스 이후에는 JavaSE가 정식 명칭이 되었다. 또, 버전 번호의 소수점 이하의 표기도 폐지되었다.

단, 내부적인 버젼은 여전히 ​​1.5, 1.6, 1.7…처럼 이전과 같은 버젼 관리를 실행하고 있어, 일부의 표기도 그렇게 되어 있으므로 주의해야 한다.

참조




최종 수정 : 2022-09-04