자바 8과 자바 18의 주요 차이점
람다 표현식 (Java 8)
Java 8에서 도입된 람다 표현식은 함수형 프로그래밍을 가능하게 합니다.
// Java 8 이전 Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello, World!"); } }; // Java 8 이후 Runnable runnable = () -> System.out.println("Hello, World!");
스트림 API (Java 8)
컬렉션을 보다 효율적으로 처리할 수 있게 해줍니다.
List<String> names = Arrays.asList("John", "Jane", "Adam", "Eve"); // Java 8 이전 List<String> filteredNames = new ArrayList<>(); for (String name : names) { if (name.startsWith("J")) { filteredNames.add(name.toUpperCase()); } } // Java 8 이후 List<String> filteredNames = names.stream() .filter(name -> name.startsWith("J")) .map(String::toUpperCase) .collect(Collectors.toList());
디폴트 메소드 (Java 8)
인터페이스에 구현을 포함할 수 있게 되었습니다.
interface Vehicle { default void start() { System.out.println("Vehicle starting..."); } } class Car implements Vehicle { // start() 메소드를 오버라이드하지 않아도 됨 }
새로운 날짜/시간 API (Java 8)
기존의 Date와 Calendar의 문제점을 해결한 새로운 API가 도입되었습니다.
// Java 8 이전 Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, 1); // Java 8 이후 LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plusDays(1);
var 키워드 (Java 10)
지역 변수 타입 추론을 지원합니다.
// Java 10 이전 String message = "Hello, World!"; // Java 10 이후 var message = "Hello, World!";
스위치 표현식 개선 (Java 12, 13, 14)
스위치문을 더 간결하게 작성할 수 있습니다.
// Java 12 이전 String result; switch (day) { case MONDAY: case FRIDAY: case SUNDAY: result = 6; break; case TUESDAY: result = 7; break; case THURSDAY: case SATURDAY: result = 8; break; case WEDNESDAY: result = 9; break; default: throw new IllegalStateException("Invalid day: " + day); } // Java 12 이후 String result = switch (day) { case MONDAY, FRIDAY, SUNDAY -> "6"; case TUESDAY -> "7"; case THURSDAY, SATURDAY -> "8"; case WEDNESDAY -> "9"; default -> throw new IllegalStateException("Invalid day: " + day); };
텍스트 블록 (Java 13, 14, 15)
여러 줄의 문자열을 더 쉽게 작성할 수 있습니다.
// Java 13 이전 String json = "{\n" + " \"name\": \"John Doe\",\n" + " \"age\": 30\n" + "}"; // Java 13 이후 String json = """ { "name": "John Doe", "age": 30 } """;
레코드 (Java 14, 15, 16)
불변 데이터 객체를 간단히 만들 수 있습니다.
// Java 14 이전 public class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name; this.age = age; } // getters, equals, hashCode, toString } // Java 14 이후 public record Person(String name, int age) {}
패턴 매칭 for instanceof (Java 14, 15, 16)
타입 검사와 캐스팅을 한 번에 할 수 있습니다.
// Java 14 이전 if (obj instanceof String) { String s = (String) obj; // s 사용 } // Java 14 이후 if (obj instanceof String s) { // s 바로 사용 가능 }
봉인 클래스 (Java 15, 16, 17)
클래스의 상속을 제한할 수 있습니다.
public sealed class Shape permits Circle, Rectangle, Square { // ... } public final class Circle extends Shape { // ... } public final class Rectangle extends Shape { // ... } public final class Square extends Shape { // ... }
이러한 새로운 기능들은 코드를 더 간결하고, 읽기 쉽게 만들며, 개발자의 생산성을 향상시킵니다. 또한 Java 8 이후의 버전들은 성능 개선, 보안 강화, API 개선 등 다양한 측면에서 지속적으로 발전해 왔습니다.
728x90
'200===Dev Language > Java' 카테고리의 다른 글
자바 코드를 더 프로페셔널하게 작성하는 팁 💡 (0) | 2024.10.30 |
---|---|
Java의 함수형 인터페이스 완벽 가이드 🎯 (0) | 2024.10.30 |
JVM Garbage Collection (0) | 2024.06.08 |
JVM Introduced (0) | 2024.06.08 |
Convert LinkedHashMap to String with Separator (0) | 2024.06.04 |