옵셔널과 스트림

고승원·2022년 10월 20일
0

TIL

목록 보기
3/24

Collection

여러 데이터의 묶음 (List, Set등등)

Iterator

  • 컬렉션 데이터(데이터 묶음)를 하나씩 쪼개서 처리하는 수단.
  • next()를 통해 다음 데이터 조회.
  • 전으로 돌아갈 수 없음.

Stream

  • 컬렉션도 결국엔 데이터의 연속

  • Iterator보다 효율적이다.

  • System.in / System.out

  • Collections.stream()을 제공

  • filter, map, forEach같은 고차함수(함수를 인자로 받는 함수)가 제공되어 굉장히 편리하다.

  • Stream을 만드는법

  • Stream.generate() / Stream.iterate

  • 스트림을 사용하면 연속된 데이터에 대해 풍부한 고차함수 사용하여 강력한 기능을 간결하게 표현 가능하다.

Optional

  • NPE : Null Pointer Exception → 가장 많이 발생하는 에러중 하나.

  • 자바에서는 거의 모든 것이 레퍼런스다. → null이 될 수 있다.

  • 항상 null check를 해야한다.

  • 이제부터 null을 쓰지 않기로 계약한다.

  • 그럼 어떻게 해야하지?

    • Empty객체를 사용하는 방법

      public static User *EMPTY* = new User(0, "");

    • Optional을 사용한다. → Optional이 다 해주는데 Empty를 사용해야하나?

Optional

null : Optional.empty();

data : Optional.of({DATA});

check하는법 : isEmpty() / isPresent()

check하는 메서드 : ifPresent() / ifPresentOrElse()

				//비어있음
				Optional<User> optionalUser = Optional.empty();
				
				//비어있지 않음
        Optional<User> optionalUser2 = Optional.of(new User(1, "a"));

        if (optionalUser.isEmpty()) { //값이 없으면 true
            System.out.println("empty");
        }else {
            System.out.println("not empty");
        }

        if (optionalUser.isPresent()) { //값이 있으면 true
            System.out.println("not empty");
        }else {
            System.out.println("empty");
        }

        optionalUser.ifPresent(user ->{ //값이 있으면 실행
            System.out.println("not empty");
        });

        optionalUser.ifPresentOrElse(user -> { //if else문으로 실행
            System.out.println("not empty");
        }, ()->{
            System.out.println("empty");
        });

정리

메서드 체이닝

컬렉션 → 자료구조

이터레이터 → 자료구조를 하나씩 쪼개서 처리하는 수단 (뒤로는 못감)

스트림 → 고차함수를 지원하기 때문에 이터레이터보다 훨씬 효율적이다.

만드는법은 generate와 iterator

옵셔널 → null은 여러 장애를 초래하기 때문에 Optional을 통해 empty상태와 객체가 비어있는지 확인하는 메서드들이 있다.

profile
봄은 영어로 스프링

0개의 댓글