Java 9(일명 JDK 1.9)는 Java 프로그래밍 언어 개발의 주요 릴리스입니다. 초기 버전은 2017년 9월 21일에 출시되었습니다. Java 9 릴리스의 주요 목표는 다음과 같습니다. JDK와 Java SE 플랫폼을 모듈화해 소형 컴퓨팅 기기까지 확장 가능하게 함 JDK와 Java 구현의 전반적인 보안 향상 Java 코드 라이브러리와 대규모 애플리케이션의 빌드 프로세스와 유지보수를 Java SE와 EE 플랫폼에서 쉽게 만듦 플랫폼과 JDK에 쉽게 적용할 수 있는 Java 플랫폼용 표준 모듈 시스템 설계 및 구현 새로운
JEP 312 - 스레드 로컬 핸드셰이크 JDK 10에는 JVM용 새 옵션 -XX:ThreadLocalHandshakes가 도입되었습니다. 이 옵션은 x64 및 SPARC 기반 머신에서만 작동합니다. 이 옵션은 VM 성능 향상을 위해 제공됩니다. 전역 VM 세이프포인트를 만들지 않고 애플리케이션 스레드에서 콜백을 수행할 수 있게 합니다. 따라서 JVM이 모든 스레드를 중단하지 않고 개별 스레드를 중단할 수 있습니다. 이 옵션은 모든 플랫폼에서 사용할 수 없으므로, 다른 플랫폼은 일반 세이프포인트로 폴백합니다.
JEP 319 - 루트 인증서 Java 10 이전의 cacerts 저장소는 빈 집합이었습니다. 다양한 보안 프로토콜 공급업체의 인증서 체인에서 신뢰를 설정하는 데 사용할 수 있는 인증서 세트가 필요했습니다. OpenJDK 빌드에는 이러한 인증서가 없어 TLS 같은 중요한 보안 구성 요소가 기본 빌드에서 작동하지 않았습니다. 이제 Oracle이 Oracle Java SE Root CA 프로그램을 통해 루트 인증서를 오픈소스로 공개함에 따라, OpenJDK 빌드에도 루트 인증서가 포함될 수 있게 되어 OpenJDK와 Oracle JDK
JEP 296 - 통합된 JDK 포레스트를 단일 저장소로 JDK 9에는 모듈 기반 디렉터리 8개가 리포지터리로 있었습니다: root corba hotspot jaxp jaxws jdk langtools nashorn 코드는 다음과 같이 구성되었습니다: $ROOT/jdk/src/java.base ... $ROOT/langtools/src/java.compiler ... Java 10부터 JDK 포레스트는 개발을 간소화하기 위해 단일 저장소로 구성됩니다. 이제 코드는 다음과 같이 구성됩니다: $ROOT/src/java.base $R
JEP 316 - 대체 메모리 장치에서의 힙 할당 Java 10의 이 개선으로 사용자는 NV-DIMM 같은 대체 메모리 장치를 HotSpot VM에 지정해 Java 힙 공간을 할당할 수 있습니다. 사용자는 새로운 옵션 -XX:AllocateHeapAt을 사용해 파일 시스템 경로를 전달해야 합니다. -XX:AllocateHeapAt=~/etc/heap 이 옵션은 파일 경로를 받아 메모리 매핑을 수행해 원하는 결과를 얻습니다. -Xmx, -Xms 같은 다른 힙 플래그도 계속 작동합니다.
JEP 314 - 유니코드 언어 태그 확장 Java 7은 BCP 47 언어 태그 지원을 도입했습니다. 하지만 이 유니코드 로케일 확장은 달력과 숫자로 제한되었습니다. Java 10에서는 java.util.Locale과 관련 클래스가 LDML 사양에 지정된 추가 유니코드 확장을 구현하도록 업데이트되었습니다. 추가된 확장: cu - 통화 타입 fw - 주의 첫째 날 rg - 지역 재정의 tz - 시간대 업데이트된 API: java.text.DateFormat::get*Instance java.text.DateFormatSymbol
JEP 304 - 가비지 컬렉터 인터페이스 Java 10 이전에는 GC(가비지 컬렉터) 구현 구성 요소가 코드 베이스 곳곳에 흩어져 있어 쉽게 교체할 수 없었습니다. Java 10에서는 가비지 컬렉터 인터페이스가 도입되어 대체 GC 구현을 플러그인할 수 있게 되었습니다. 또한 다양한 가비지 컬렉션 구현으로부터 코드 베이스를 격리하는 데도 도움이 됩니다. 이 기능은 JEP 304의 일부입니다. JEP 307 - G1을 위한 병렬 풀 GC Java 9는 G1(Garbage First) 가비지 컬렉터를 도입했습니다. G1은 풀 가비지
JEP 310 - 애플리케이션 클래스 데이터 공유 JVM이 시작되면 클래스를 메모리에 로드하는 예비 단계를 거칩니다. 여러 JAR에 여러 클래스가 있는 경우 첫 요청에서 눈에 띄는 지연이 발생합니다. 서버리스 아키텍처에서 이러한 지연은 부팅 시간을 지연시키는데, 이는 중요한 작업입니다. 애플리케이션 클래스 데이터 공유 개념은 애플리케이션 시작 시간을 줄이는 데 도움이 됩니다. Java에는 기존 CDS(Class-Data Sharing) 기능이 있습니다. 애플리케이션 클래스 데이터 공유를 통해 Java 10은 애플리케이션 클래스를 공
JEP 317 - 실험적 Java 기반 JIT 컴파일러 JIT 컴파일러는 C++로 작성되어 Java를 바이트코드로 변환합니다. Java 10에는 표준 JIT 컴파일러 대신 실험적인 Java 기반 JIT 컴파일러인 Graal을 사용할 수 있는 옵션이 추가되었습니다. Graal은 Java 9에서 도입된 JVMCI(JVM Compiler Interface)를 사용합니다. Graal은 Java 9에서도 대안으로 제공되었지만, Java 10에서는 테스트와 디버깅을 위해 Graal을 활성화할 수 있습니다. 활성화 구문 java -XX:+Un
JDK 10 릴리스는 Java 라이브러리에서 여러 API, 기능, 옵션을 사용 중단했습니다. 관련 세부 사항은 다음과 같습니다. SNMP 모니터링 지원 사용 중단 - JVM의 SNMP 모니터링 및 관리를 지원하는 jdk.snmp 모듈이 사용 중단되었으며 forRemoval=true로 표시됨 java.security 클래스 사용 중단 - java.security.{Certificate, Identity, IdentityScope, Signer} 클래스가 사용 중단되고 forRemoval=true로 표시 javax.security.
JDK 10 릴리스는 Java 라이브러리에서 여러 사용 중단된 API, 기능, 옵션을 제거했습니다. 관련 세부 사항은 다음과 같습니다. 지원되지 않는 LookAndFeel 제거 - Nimbus 또는 Aqua LookAndFeel을 사용하는 애플리케이션은 새 문법으로 마이그레이션해야 합니다. Nimbus - 기존 코드 javax.swing.UIManager.setLookAndFeel(com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel); Nimbus - 새 코드 UIManager.setLo
JDK 10 릴리스는 Java 라이브러리에 70개 이상의 새로운 API와 옵션을 추가했습니다. 주요 개선 사항은 다음과 같습니다. Optional.orElseThrow() 메서드 java.util.Optional 클래스에 새로운 메서드 orElseThrow()가 추가되었으며, 이는 get() 메서드의 권장 대안입니다. 수정 불가능한 컬렉션 생성 API List, Set, Map 인터페이스에 기존 컬렉션에서 새 컬렉션 인스턴스를 생성하는 copyOf() 메서드가 추가되었습니다. Collector 클래스에는 스트림 요소를 수정 불가
JEP 286 - 지역 변수 타입 추론 지역 변수 타입 추론은 Java 10부터 사용 가능한 언어에서 가장 눈에 띄는 변화 중 하나입니다. var 키워드를 사용해 타입을 명시하지 않고 변수를 정의할 수 있습니다. 컴파일러가 제공된 값을 바탕으로 변수의 타입을 추론합니다. 이 타입 추론은 지역 변수에만 제한됩니다. 기존 지역 변수 선언 방식 String name = Welcome to tutorialspoint.com; 새로운 지역 변수 선언 방식 var name = Welcome to tutorialspoint.com; 이제 컴
JEP 322 - 시간 기반 릴리스 버저닝 Java 10부터 Oracle은 Java 릴리스에 엄격한 시간 기반 릴리스 버저닝 모델을 도입했습니다. 이제 Java는 6개월마다 메이저 릴리스를 가집니다. Java 10은 2018년 3월에 출시되었으며, 향후 모든 메이저 버전은 매년 3월과 9월에 출시될 예정입니다. 릴리스는 세 가지 주요 범주로 분류됩니다. 기능 릴리스(Feature Release): 언어별 기능, JVM 기능, 새/개선된 API, API 제거/사용 중단 포함. 기능 릴리스 시점은 고정되어 있으며, 포함될 기능에 제
온라인 라이브 데모 옵션 Java 프로그래밍 환경을 온라인으로 설정하여 모든 예제를 온라인에서 컴파일하고 실행할 수 있습니다. 읽고 있는 내용에 확신을 주고, 다양한 옵션으로 프로그램을 검증할 수 있습니다. 아래 샘플 코드 박스 오른쪽 상단의 라이브 데모 옵션을 사용해 다음 예제를 실행해 보세요. public class MyFirstJavaProgram { public static void main(String[] args) { System.out.println(Hello World); } } 이 튜토리
Java 10 개요 Java 10은 Java 릴리스 주기에서 중요한 릴리스로, 2018년 3월 10일에 출시되었습니다. Java 10부터 Oracle은 Java 릴리스 주기를 새로운 모델로 변경했습니다: 6개월 릴리스 주기와 Oracle Java SE 제품에 대한 LTS(Long Term Support) 모델입니다. Java 10부터 Oracle은 6개월마다 새로운 Java 버전을 출시하며, 각 버전에는 한두 개의 주요 기능이 포함됩니다. Oracle은 릴리스 트레인 개념을 사용합니다. 각 릴리스 트레인은 6개월로 예정되어 있으며,
자바는 세 가지 주석 타입을 지원합니다: /* 블록 주석 */, // 줄 주석, 그리고 문서화 주석(/** ... */). Javadoc 도구는 문서화 주석에서 HTML 문서를 자동 생성합니다. Javadoc이란? JDK에 포함된 도구로, 소스 코드의 문서화 주석을 파싱하여 API 문서(HTML)를 생성합니다. 표준 형식을 따르면 클래스, 메서드, 필드, 패키지 설명을 체계적으로 정리할 수 있습니다. 기본 문서화 주석 구조 /** * 클래스/메서드/필드에 대한 설명 (첫 문장은 요약으로 사용됨) * <p> * 상
애플릿(Applet)은 웹 브라우저에서 실행되는 자바 프로그램입니다. 자바 API 전체를 사용할 수 있어 완전한 기능을 갖춘 애플리케이션 구현이 가능했으나, 현재는 지원 중단(Deprecated)된 기술로 최신 브라우저에서 실행되지 않습니다. 이 문서는 레거시 시스템 유지보수나 학습 목적으로만 참고하시기 바랍니다. 애플릿과 독립형 애플리케이션의 차이 java.applet.Applet 클래스 상속 필수 main() 메서드 없음 (브라우저가 생명주기 메서드 호출) HTML 페이지에 <applet> 태그로 임베드 사용자 머
자바는 멀티스레드 프로그래밍 언어로, 하나의 프로그램 내에서 여러 작업을 동시에 수행할 수 있습니다. 멀티스레딩을 통해 CPU 코어를 최대한 활용하고 애플리케이션의 반응성과 처리량을 높일 수 있습니다. 스레드 생명 주기 스레드는 생성부터 종료까지 다음과 같은 상태를 거칩니다. New (생성): new Thread()로 생성되었으나 start()가 호출되지 않은 상태 Runnable (실행 가능): start() 호출 후 스케줄러의 선택을 기다리는 상태 Running (실행 중): CPU를 할당받아 run() 메서드 실행 중 Wa
자바 애플리케이션에서 이메일을 전송하려면 JavaMail API와 JAF(Java Activation Framework)가 필요합니다. 이 가이드에서는 기본 텍스트 이메일부터 HTML 이메일, 첨부 파일 전송, 인증 설정까지 단계별로 설명합니다. 필수 라이브러리 설치 JavaMail API (최신 버전): Oracle 공식 사이트에서 다운로드 JAF (최신 버전): Oracle 공식 사이트에서 다운로드 다운로드 후 압축을 해제하면 mail.jar와 activation.jar 파일이 있습니다. 이 두 파일을 프로젝트의 CLASS
java