CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • Java 8
  • 람다 표현식
  • 스트림 API
  • 신규 날짜와 시간 API
  • 디폴트 메서드
  • Java 11
  • HttpClient 표준화
  • var 키워드 사용 확장
  • 여러 메서드 추가
  • 단일 파일 소스 코드 프로그램 실행
  • 가비지 컬렉터 개선
  • Java 17
  • Record Class
  • Sealed Class
  • Pattern Matching 스위치문
  • Switch Expression
  1. java

Java8 vs Java11 vs Java17

PreviousJava ThreadNext객체지향 프로그래밍 OOP (Object Oriented Programing)

Last updated 11 months ago

람다 표현식

  • 함수형 프로그래밍 스타일을 자바에 도입

  • 예시

    // 기존 익명 클래스 방식
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Hello, world!");
        }
    }).start();
    
    // 람다 표현식 방식
    new Thread(() -> System.out.println("Hello, world!")).start();

스트림 API

  • 컬렉션 데이터를 함수형 스타일로 처리하는 도구

  • 주로 Filtering, Mapping, Sorting 등의 작업을 쉽게 수행할 수 있게 해줌

  • 예시

    List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");
    List<String> filteredNames = names.stream()
                                      .filter(name -> name.startsWith("A"))
                                      .collect(Collectors.toList());
    System.out.println(filteredNames); // [Alice]

신규 날짜와 시간 API

  • java.time package

  • java.util.Date와 java.util.Calendar의 복잡함과 불편함을 해결

  • 예시

    LocalDate today = LocalDate.now();
    LocalDate birthday = LocalDate.of(1990, Month.JANUARY, 1);
    Period age = Period.between(birthday, today);
    System.out.println("Age: " + age.getYears());

디폴트 메서드

  • 인터페이스에서 메서드 구현을 제공

  • 예시

    interface MyInterface {
        void existingMethod();
        
        default void newMethod() {
            System.out.println("New default method");
        }
    }
    
    class MyClass implements MyInterface {
        @Override
        public void existingMethod() {
            System.out.println("Existing method implementation");
        }
    }
    
    MyClass myClass = new MyClass();
    myClass.existingMethod(); 
    myClass.newMethod();

HttpClient 표준화

  • Java 9에서 소개되었던 HttpClient API가 Java 11에서 표준으로 채택 (기존에는 RestTemplate)

  • HTTP/1.1, HTTP/2, WebSocket 지원

var 키워드 사용 확장

  • 자바 10에서 소개되었던 var 키워드를 사용하여 지연 변수 타입을 추론할 수 있음.

여러 메서드 추가

  • String 클래스

    • isBlank(): 문자열이 공백으로만 이루어져 있는지 확인.

    • lines(): 문자열을 줄 단위로 분할하여 스트림으로 반환.

    • strip(), stripLeading(), stripTrailing(): 문자열의 앞뒤 공백을 제거.

    • repeat(int times): 문자열을 주어진 횟수만큼 반복.

    • 예시

      String str = " Hello World ";
      System.out.println(str.isBlank()); // false
      System.out.println(str.strip()); // "Hello World"
      System.out.println("Java".repeat(3)); // "JavaJavaJava"
  • Optional 클래스

    • isEmpty(): 값이 비어있는지 확인.

    • 예시

      Optional<String> optional = Optional.empty();
      System.out.println(optional.isEmpty()); // true

단일 파일 소스 코드 프로그램 실행

  • Java 11부터는 단일 파일로 작성된 소스 코드를 컴파일 없이 바로 실행할 수 있음.

    $ java HelloWorld.java

가비지 컬렉터 개선

  • ZGC

    • 매우 낮은 Latency를 목표로 설계됨 - GC 중 쓰레드가 멈추는 시간을 짧게 유지

    • 대규모 Heap 지원 - 최대 수백 GB까지 메모리를 효율적으로 관리할 수 있음

    • 사용법

      java -XX:+UseZGC -jar myapp.jar
  • Epsilon GC

    • 실험적으로 등장

Record Class

  • 간결하고 명료한 방식으로 데이터 클래스를 정의할 수 있는 새로운 클래스 유형

  • 멤버 변수는 private final

  • 필드별 getter, equal, hashCode, toString 자동 생성

  • 예시

    // 기존
    public class Person {
        private final String name;
        private final int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public int getAge() {
            return age;
        }
    
        @Override
        public boolean equals(Object o) {
            ...
        }
    
        @Override
        public int hashCode() {
            ...
        }
    
        @Override
        public String toString() {
            ...
        }
    }
    
    // record
    public record Person(String name, int age) { }
    

Sealed Class

  • 봉인된 클래스를 사용하여 계층 구조를 더 염격하게 제어

  • 예시

    public abstract sealed class Shape
        permits Circle, Square { }
    
    public final class Circle extends Shape { }
    public final class Square extends Shape { }

Pattern Matching 스위치문

  • switch문에 패턴을 적용하여 유연한 매칭이 가능해짐

  • 예시

    static String formatterPatternSwitch(Object obj) {
        return switch (obj) {
            case Integer i -> String.format("int %d", i);
            case Long l    -> String.format("long %d", l);
            case Double d  -> String.format("double %f", d);
            case String s  -> String.format("String %s", s);
            default        -> obj.toString();
        };
    }

Switch Expression

  • 기존의 Switch문의 중복을 제거한 방식

// 기존
public static void printDayOfWeek(String dayOfWeek) {
    switch (dayOfWeek) {
        case "Monday":
        case "Tuesday":
        case "Wednesday":
        case "Thursday":
        case "Friday":
            System.out.println("평일입니다.");
            break;
        case "Saturday":
        case "Sunday":
            System.out.println("주말입니다.");
            break;
    }
    
// Java 17
public static void printDayOfWeek(String dayOfWeek) {
    switch (dayOfWeek) {
        case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" 
            -> System.out.println("평일입니다.");
        case "Saturday", "Sunday"
            -> System.out.println("주말입니다.");
    }

Java 8
Java 11
Java 17