자바 플랫폼, 스탠더드 에디션

자바 플랫폼 스탠더드 에디션(Java Platform, Standard Edition, 약자 Java SE)는 데스크톱 및 서버, 최근의 고사양 임베디드 시스템을 위한 표준 자바 플랫폼으로 표준적인 컴퓨팅 환경을 지원하기 위한 자바 가상 머신 규격 및 API 집합을 포함한다. 따라서 자바 EE, 자바 ME 등 다른 플랫폼은 구체적인 목적에 따라 자바 SE를 기반으로 API를 추가하거나 자바 가상 머신 규격 및 API의 일부를 택해서 정의된다.

자바 플랫폼에 에디션 분류가 도입된 것은 자바 1.2부터로 이전 1.1.x 버전과의 큰 차이를 감안해 자바 2로 부르고 서버 시스템을 위한 API를 추가한 엔터프라이즈 에디션(자바 2 EE), 그 때까지 임베디드 시스템을 위해 만들어진 퍼스널자바(PersonalJava) 및 임베디드자바EmbeddedJava)를 계승한 임베디드 에디션(자바 2 ME) 브랜드를 추가했다. 이후 1.4.x 버전까지 자바 2 SE 1.4.x 혹은 J2SE 1.4.x식으로 명명하다가 1.5 버전에서 J2SE 5.0 식으로 바뀌었다가 1.6 버전부터 자바 SE 6 형태로 명명하게 되었다. 하지만 내부 버전 표기인 1.x.x 형태는 계속 유지되고 있다. 현재 최신 버전 라인은 Java SE 8(1.8.x)와 Java SE JDK(Java Development Kit) 11(11.0.x)이며 Java SE 9부터는 내부 버전도 x.x의 형태로 바뀌었다.

1.4 버전 이전에는 썬 마이크로시스템즈에서 임의로 API를 설계하고 구현해서 공개했으나 J2SE 1.4 이후는 JCP 주도 하에 JSR(Java Specification Request, 자바 명세 작성 요청)을 만들어 포함될 API를 결정하고 각 API는 별도의 JSR를 통해 규격이 제정되고 있다. J2SE 1.4는 JSR 59 하에, J2SE 5.0(프로젝트명 타이거)는 JSR 176, Java SE 6 (프로젝트명 무스탕)은 JSR 170 하에 개발되었다.

자바 가상 머신 규격

자바 SE는 자바 가상 머신 규격 전체를 지원한다. JVM 규격의 변경이 필요한 기능은 일반적으로 자바 SE에 제안되고 추후 자바 EE 및 ME에 포함된다. 엄밀히 JVM 규격의 일부는 아니지만 API를 통해 실행 시간에 클래스에 대한 정보를 얻고 메서드를 호출할 수 있는 리플렉션(영어: reflection) API와 가비지 콜렉션을 좀 더 세밀히 제어할 수 있는 참조 객체 API(java.lang.ref)도 JVM 구현에 영향을 미치는데 자바 SE에서는 이 들 API도 완전히 지원한다.

API

자바 SE에 포함되는 API는 자바 EE에 그대로 포함되며 자바 ME에는 일부만 추려서 수용된다. JCP과 과거 썬 마이크로시스템즈에 의해 설계된 API는 java 혹은 javax로 시작되는 패키지 이름을 가지며 그 외 W3C 등 다른 기관에서 정의된 API의 경우 org.w3c.dom과 같이 다른 패키지 이름을 가지기도 한다. 다음 API 개요는 자바 6를 기준으로 한다.

javax의 유래

패키지 이름이 java로 시작되는 API는 처음부터 자바 SE의 일부로 설계된 것이고 javax로 시작되는 API는 자바 SE와 별개로 선택적으로 사용하도록 제안된 API이거나 그랬던 API가 추후 자바 SE에 수용된 것이다. java와 javax를 구분하게 된 것은 AWT를 기반으로 구현된 GUI 프레임워크인 스윙(영어: Swing) API의 개발과 밀접한 관계가 있다. 초기 스윙 개발이 시작했을 때 스윙은 기존 자바 1.1에서도 실행할 수 있고 동시에 새로운 자바 1.2에서도 실행되는 것을 목표로 했다. 따라서 자바 1.1에는 별도로 다운로드 받아 사용하거나 애플릿 혹은 애플리케이션과 함께 다운로드되는 선택적인 라이브러리임과 동시에 추후 자바 1.2에는 표준으로 들어가야 했다. 문제는 java로 시작하는 패키지 이름은 특별히 취급되어 다운로드된 코드에서는 사용할 수 없게 되어 있었다는 점이다. 따라서 자바 1.1에서 java로 시작하는 패키지 이름을 사용할 수 없었고 다른 패키지 이름을 택할 수 밖에 없었다.

SPI 패키지

자바 표준 API에서는 spi로 끝나는 패키지가 다수 포함되어 있다. 이는 Service Provider Interface의 약자로 spi가 빠진 패키지의 API에 추가로 기능을 끼워 넣을 수 있도록 정의된 인터페이스를 포함하고 있다. 예를 들어 java.awt.im의 입력 방법은 한글 입력 엔진, 한자 입력 엔진 등 다양한 입력 방법에 독립적인 API를 제공하고 있는데 java.awt.im.spi 내의 인터페이스를 이용함으로써 새로운 언어를 위한 입력 방법을 추가할 수 있다.

UI 관련 API

자바의 UI는 자바 1.0부터 포함된 AWT(Abstract Window Toolkit)을 기본으로 그 위에 구축된 스윙을 포함하고 있다. AWT는 하부 윈도 시스템에 대한 추상화 계층의 역할을 하며 윈도, 사용자 입력, 2D 그래픽 등의 기본적인 서비스를 스윙과 같은 상위 계층에 제공한다. 초기에는 기본적인 2D 그래픽 및 대부분의 윈도 시스템에서 제공하는 버튼 등의 GUI 컴포넌트에 대한 일종의 껍데기를 제공하는 수준에 머물렀으나 고수준 벡터 그래픽 API인 자바 2D, 프린팅, 클립보드, 드래그 앤 드롭(drag & drop), 입력 방법, 접근성 지원, 이미지 파일 입출력, 트레이 지원 등의 데스크톱 통합 등 더 많은 서비스를 제공하도록 확장되었다. 물론 이에 따라 스윙도 이를 기반으로 좀 더 고수준 API를 제공하도록 진화하였다. UI 관련 API들은 패키지 기준으로 다음과 같다.

다음은 스윙 관련 패키지들이다.

입출력 API

기본적으로 java.io 패키지에 스트림 기반 입출력 모델과 기본적인 파일 시스템을 다룰 수 있는 API를 제공한다. 이를 네트워킹, 이미지 입출력 등 입출력이 필요한 API에서 두루 사용했다. 자바 1.4부터 NIO(New I/O) API가 소개됐는데 이는 메모리 영역인 버퍼를 기반으로 채널이라는 새로운 개념을 도입해 더 고성능에 유연한 입출력이 가능해졌다. NIO는 자바 7에서 버전 2로 개선되어 파일 시스템에 대한 보다 세부적인 제어가 가능해 지고 java.io와 완전히 무관하게 파일, 네트워크 입출력을 가능하게 할 예정이다.

나머지 API

같이 보기

각주

외부 링크