Optional은 null이 아닌 객체를 담는 컨테이너 객체입니다. Optional 객체는 값이 없을 때 null을 표현하는 데 사용됩니다. 이 클래스는 값을 사용 가능 또는 사용 불가로 처리할 수 있는 다양한 유틸리티 메서드를 제공하여, 직접 null을 확인하는 대신 안전하게 다룰 수 있게 해줍니다. Java 8에 도입되었으며, Guava의 Optional과 유사합니다. 클래스 선언 다음은 java.util.Optional<T> 클래스의 선언입니다. public final class Optional<T> ex
스트림은 Java 8에 도입된 새로운 추상 계층입니다. 스트림을 사용하면 SQL 문과 유사하게 선언적 방식으로 데이터를 처리할 수 있습니다. 예를 들어 다음 SQL 문을 고려해 보세요. SELECT max(salary), employee_id, employee_name FROM Employee 위 SQL 표현식은 개발자 측에서 어떤 계산도 하지 않고 최대 급여 직원의 세부 정보를 자동으로 반환합니다. Java의 컬렉션 프레임워크를 사용하면 개발자는 루프를 사용하고 반복적인 검사를 해야 합니다. 또 다른 관심사는 효율성입니다. 멀티코
Java 8은 인터페이스에 기본 메서드 구현이라는 새로운 개념을 도입했습니다. 이 기능은 기존 인터페이스가 Java 8의 람다 표현식 기능을 활용할 수 있도록 하위 호환성을 위해 추가되었습니다. 예를 들어, List나 Collection 인터페이스에는 forEach 메서드 선언이 없습니다. 따라서 이러한 메서드를 단순히 추가하면 컬렉션 프레임워크 구현이 깨집니다. Java 8은 기본 메서드를 도입해 List/Collection 인터페이스가 forEach 메서드의 기본 구현을 가질 수 있게 하고, 이 인터페이스를 구현하는 클래스는
함수형 인터페이스는 단일 기능을 나타냅니다. 예를 들어, 단일 메서드 compareTo를 가진 Comparable 인터페이스는 비교 목적으로 사용됩니다. Java 8은 람다 표현식에서 광범위하게 사용하기 위해 많은 함수형 인터페이스를 정의했습니다. java.util.function 패키지에 정의된 인터페이스 목록: 번호 인터페이스 및 설명 1BiConsumer<T,U> - 두 입력 인자를 받고 결과를 반환하지 않는 연산 표현 2BiFunction<T,U,R> - 두 인자를 받아 결과를 생성하는 함
메서드 참조는 메서드를 이름으로 가리키는 데 도움이 됩니다. 메서드 참조는 :: 기호로 설명됩니다. 메서드 참조는 다음 유형의 메서드를 가리키는 데 사용될 수 있습니다. 정적 메서드 인스턴스 메서드 new 연산자를 사용한 생성자 (TreeSet::new) 메서드 참조 예제 원하는 에디터로 다음 Java 프로그램 생성 (예: C:\JAVA). Java8Tester.java import java.util.List; import java.util.ArrayList; public class Java8Tester { publ
람다 표현식은 Java 8에 도입되었으며 Java 8의 가장 큰 기능으로 꼽힙니다. 람다 표현식은 함수형 프로그래밍을 용이하게 하고 개발을 크게 단순화합니다. 구문 람다 표현식은 다음 구문으로 특징지어집니다. expression body 람다 표현식의 중요한 특징: 선택적 타입 선언 - 매개변수 타입을 선언할 필요 없음. 컴파일러가 매개변수 값에서 추론 선택적 매개변수 괄호 - 단일 매개변수는 괄호 불필요. 다중 매개변수는 괄호 필요 선택적 중괄호 - 본문이 단일 문장이면 중괄호 불필요 선택적 return 키워드 - 본문이
로컬 환경 설정 Java 프로그래밍 언어를 위한 자체 환경을 설정하려면 이 섹션의 단계를 따르세요. Java SE는 다음 링크에서 무료로 다운로드할 수 있습니다. https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 운영체제에 기반한 버전을 다운로드하세요. 다운로드 지침을 따라 Java를 다운로드하고 .exe를 실행해 머신에 설치하세요. 설치 후 환경 변수를 설정해 올바른 설치 디렉터리를 가리키도록 해야 합니다. Windows 2000/XP에서
Java 8은 Java 프로그래밍 언어 개발의 주요 기능 릴리스입니다. 초기 버전은 2014년 3월 18일에 출시되었습니다. Java 8 릴리스로 Java는 함수형 프로그래밍 지원, 새로운 JavaScript 엔진, 날짜 시간 조작을 위한 새로운 API, 새로운 스트리밍 API 등을 제공했습니다. 새로운 기능 람다 표현식(Lambda expression) - Java에 함수형 처리 기능 추가 메서드 참조(Method references) - 함수를 직접 호출하는 대신 이름으로 참조. 함수를 매개변수로 사용 기본 메서드(Defau
CompletableFuture 클래스는 Java 8에서 값과 상태를 명시적으로 설정해 완료할 수 있는 Future를 나타내기 위해 도입되었습니다. java.util.concurrent.CompletionStage로 사용할 수 있으며, 미래 완료 시 트리거되는 종속 함수와 액션을 지원합니다. Java 9에서 CompletableFuture API가 더욱 개선되었습니다. 관련 변경 사항: 지연과 타임아웃 지원 서브클래싱 지원 개선 새로운 팩토리 메서드 추가 지연과 타임아웃 지원 public CompletableFuture<
Java 9에서는 여러 해상도 변형이 있는 이미지를 지원하는 새로운 멀티해상도 이미지 API가 도입되었습니다. 이 API는 서로 다른 해상도의 이미지 세트를 단일 멀티해상도 이미지로 사용할 수 있게 합니다. 멀티해상도 이미지의 주요 연산: Image getResolutionVariant(double destImageWidth, double destImageHeight) - 지정된 크기에서 이 논리적 이미지를 가장 잘 표현하는 특정 이미지 변형 가져오기 List<Image> getResolutionVariants() -
Optional 클래스는 null 체크와 NullPointerException 문제를 피하기 위해 Java 8에 도입되었습니다. Java 9에서는 기능을 개선하기 위해 세 가지 새로운 메서드가 추가되었습니다. stream() ifPresentOrElse() or() stream() 메서드 구문 public Stream<T> stream() 값이 있으면 해당 값만 포함하는 순차 스트림을 반환하고, 그렇지 않으면 빈 스트림을 반환합니다. 예제 o.isPresent() ? Stream.of(o.get()) : Stre
다이아몬드 연산자(<>)는 Java 7에서 코드 가독성을 높이기 위해 도입되었지만 익명 이너 클래스에서는 사용할 수 없었습니다. Java 9부터 익명 클래스에서도 사용할 수 있어 코드를 단순화하고 가독성을 높입니다. Java 9 이전 코드를 살펴보겠습니다. Java 9 이전 (타입 명시 필요) public class Tester { public static void main(String[] args) { Handler<Integer> intHandler = new Handler<In
@Deprecated 어노테이션은 Java 5 버전에 도입되었습니다. @Deprecated로 주석된 프로그램 요소는 다음 이유 중 하나로 사용하지 않아야 함을 의미합니다. 사용 시 오류 발생 가능 향후 버전에서 호환되지 않을 수 있음 향후 버전에서 제거될 수 있음 더 나은 효율적인 대안이 대체함 컴파일러는 사용 중단된 요소가 사용될 때마다 경고를 생성합니다. Java 9에서는 @Deprecated 어노테이션에 두 가지 새로운 개선이 추가되었습니다. forRemoval - 주석된 요소가 향후 버전에서 제거 대상인지 여부 표시.
try-with-resources 문은 하나 이상의 리소스가 적절히 선언된 try 문입니다. 여기서 리소스는 더 이상 필요하지 않을 때 닫혀야 하는 객체입니다. try-with-resources 문은 각 리소스가 요구 사항 완료 후 닫히도록 보장합니다. java.lang.AutoCloseable 또는 java.io.Closeable 인터페이스를 구현한 모든 객체를 리소스로 사용할 수 있습니다. Java 9 이전에는 리소스를 try 이전이나 try 문 안에 선언해야 했습니다. 다음 예제에서 BufferedReader를 리소스로 사용
스트림은 객체 시퀀스에서 집계 연산을 수행하도록 돕기 위해 Java에 도입되었습니다. Java 9에서는 스트림을 더 좋게 만들기 위해 몇 가지 메서드가 추가되었습니다. takeWhile(Predicate 인터페이스) 구문 default Stream<T> takeWhile(Predicate<? super T> predicate) takeWhile 메서드는 프레디케이트가 false를 반환할 때까지 모든 값을 가져옵니다. 정렬된 스트림의 경우, 주어진 프레디케이트와 일치하는 이 스트림에서 가져온 요소의 가장 긴 접
Java 9에서 운영체제 프로세스를 제어하고 관리하는 역할을 하는 프로세스 API가 크게 개선되었습니다. ProcessHandle 클래스는 이제 프로세스의 네이티브 프로세스 ID, 시작 시간, 누적 CPU 시간, 인수, 명령, 사용자, 부모 프로세스, 자손 프로세스를 제공합니다. ProcessHandle 클래스는 프로세스 생존 여부 확인과 프로세스 종료 메서드도 제공합니다. onExit 메서드가 있어 CompletableFuture 클래스가 프로세스 종료 시 비동기적으로 액션을 수행할 수 있습니다. Tester.java Stre
Java 8 이전에는 인터페이스에 다음 유형의 변수/메서드만 가질 수 있었습니다. 상수 변수 추상 메서드 따라서 인터페이스에 메서드 구현, 즉 기본 구현을 가질 수 없었습니다. 예제를 보겠습니다. Java 7 스타일 (인터페이스에 구현 없음) public class Tester { public static void main(String[] args) { LogOracle log = new LogOracle(); log.logInfo(); log.logWarn(); log.logError();
Java 9부터 List, Set, Map 인터페이스에 불변 인스턴스를 생성하는 새로운 팩토리 메서드가 추가되었습니다. 이 팩토리 메서드는 컬렉션을 덜 장황하고 간결하게 생성하는 편의 메서드입니다. 기존 컬렉션 생성 방식 import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set
Java 9에서는 JAR 형식이 개선되어 서로 다른 버전의 Java 클래스나 리소스를 유지하고 플랫폼에 따라 사용할 수 있게 되었습니다. JAR에서 MANIFEST.MF 파일의 메인 섹션에 Multi-Release: true 항목이 있습니다. META-INF 디렉터리에는 versions 하위 디렉터리가 있으며, 그 하위 디렉터리(Java 9부터는 9로 시작)에 버전별 클래스와 리소스 파일이 저장됩니다. 이 예제에서는 멀티릴리스 JAR을 사용해 Tester.java 파일의 두 버전(JDK 7용, JDK 9용)을 두고 다른 JDK 버
Java 문서는 javadoc 도구로 생성할 수 있습니다. 현재는 HTML 4.0 형식으로 문서를 생성합니다. Java 9에서는 명령줄 인수에 -html5 옵션을 사용해 HTML 5 형식으로 문서를 생성할 수 있습니다. 기존 스타일 Java 문서 C:/JAVA 폴더에 다음 코드 고려: Tester.java /** * @author MahKumar * @version 0.1 */ public class Tester { /** * 실행할 기본 메서드 * <p>Hello world</p&
java