• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Java 16 주요 변경점
        2023년 05월 20일
        • starryeye
        • 작성자
        • 2023.05.20.오전01:41
        반응형

        JDK 16

        1. Stream 클래스에 메서드 추가

         

        toList()

        스트림의 요소들을 순서대로 List 에 담아 반환한다.

        Java 16 이전에는 collect(Collectors.toList()) 를 사용했지만, 좀더 간결하게 표현 가능해졌다.

         

         

        mapMulti()

        mapMulti() 를 알아보는 김에..

        map(), flatMap(), multiMap() 를 알아보겠다. (map, flatMap 은 Java 8)

         

        map()

        스트림 내부의 요소 하나하나에 접근해서...

        파라미터로 넣어준 함수를 실행한 뒤 최종연산에서 지정한 형식으로 반환해주는 메서드이다.

         

        flatMap()

        스트림 내부의 각 요소를 한번 더 또다른 스트림으로 변환하고,

        이렇게 생성된 모든 스트림을 하나의 스트림으로 결합한다. (중첩된 데이터 구조를 평탄화 하는데 효과적)

        ex) List의 List 또는 Stream 의 Stream 처럼 중첩된 구조를 단순한 구조로 변환

        List의 List 로 중첩된 구조를 flatMap() 메서드를 통해 평탄화 한 코드이다.

         

        이해를 돕기 위해 flatMap() 을 사용하지 않고 map() 메서드만을 이용해 동일한 결과를 만든 코드이다.

         

         

        한번 더 이해를 돕기 위해 이번엔 동일한 input 으로 다른 output 을 만들어 보았다.

         

        multiMap()

        각 요소를 여러 요소로 변환하는 연산이다.

         

         

        Stream의 mapMulti() 는 값을 하나 받아서 여러개를 생성할 수 있다.

        flatMap() 의 기능도 mapMulti() 를 활용하면 쉽게 구현할 수 있다...

         

        이해를 돕기위해 2개의 예시를 작성했다.

         

        multiMap() 메서드의 람다 표현식은 두개의 인자를 받는다.

        첫번째 인자는 현재 요소가 매핑된다.

        두번째 인자는 Consumer 타입 인스턴스가 들어가는데..

        메서드 사용자는 인스턴스를 직접 만들 필요는 없다.

        (Consumer 인스턴스는 multiMap() 메서드 내부에서 자체적으로 생성)

         

        단순히 해당 Consumer 의 인스턴스에 accept() 메서드 인자로...

        최종 리스트에 들어갈 값을 집어 넣어 주면 된다.

         

        참고>

        첫번째 예시에서 볼 수 있는 것 처럼, 첫번째 인자에는 현재 요소의 타입을 사용하면되고

        최종 리스트의 요소 타입이 될 것은 Consumer의 Generic 타입으로 넣어주면 된다.

         

         

        2. instanceof 와 패턴 매칭

        Java 16 부터는 instanceof 와 패턴 매칭을 결합하여 사용할 수 있게 되었다.

         

        예시 코드로 알아보자

        기존의 instanceof 사용법에서는 객체의 타입을 확인한 후

        해당 객체를 해당 타입으로 명시적 형변환을 수행해야 했다.

         

        Java 16 부터 instanceof 연산자와 패턴 매칭을 결합하여 코드를 단순화 할 수 있게 되었다.

        obj 가 String 타입인지 확인하고 맞다면, obj 를 String 타입으로 형변환 후 str 에 할당한다.

        이때 str 을 패턴 변수라고 부른다.

         

        위와 같은 코드도 가능하다.

        첫번째 if 문에서.. 패턴 변수 str1 을 바로 사용하는 것(isBlank)을 볼 수 있다.

         

        두번째 if 문에서는 obj 가 String 타입이 아닌 경우 if 문 내부의 코드를 실행하게 된다.

        이 경우, str2 를 할당 받지 않는다. if 문 내부에서 str2 를 참조 할 수 없다는 것이다.

        여기서.. 흥미로운점은

        obj 가 String 타입인 경우엔 if 블록 외부를 수행하는데 이때 str2 가 할당이 된다.

        그래서 if 블록 외부에서 str2 패턴 변수를 사용할 수 있다.

         

        3. record 클래스

        Java 16 에 추가된 record 클래스의 설명은 이미 포스팅한 이력이 있으므로 url 로 대체

        https://starryeye.tistory.com/150

         

         

        반응형

        'Java' 카테고리의 다른 글

        Java NIO 와 동기 non-blocking + CPU 자원  (0) 2023.11.15
        Java IO 와 동기 blocking + CPU 자원  (0) 2023.11.15
        Java 11 ~ 15 주요 변경점  (0) 2023.05.19
        Java 9, 10 주요 변경점  (0) 2023.05.19
        불변 객체 validation  (1) 2023.05.07
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
      • JDK 16
      • 1. Stream 클래스에 메서드 추가
      • 2. instanceof 와 패턴 매칭
      • 3. record 클래스
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바

      단축키

      내 블로그

      내 블로그 - 관리자 홈 전환
      Q
      Q
      새 글 쓰기
      W
      W

      블로그 게시글

      글 수정 (권한 있는 경우)
      E
      E
      댓글 영역으로 이동
      C
      C

      모든 영역

      이 페이지의 URL 복사
      S
      S
      맨 위로 이동
      T
      T
      티스토리 홈 이동
      H
      H
      단축키 안내
      Shift + /
      ⇧ + /

      * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.