728x90
  • 람다식은 메서드를 하나의 "식(expression)"으로 표현한 것이다.
  • 람다식은 메서드의 매개변수로 전달되어지는 것이 가능하고, 메서드의 결과로 반환될 수도 있다.
  • 람다식을 다루기 위한 인터페이스를 "함수형 인터페이스"라고 하며, 함수형 인터페이스에는 오직 하나의 추상 메서드만 정의되어 있어야 한다.
  • 람다식이 하나의 메서드만 호출하는 경우에는 "메서드 참조(method reference)"라는 방법으로 람다식을 간략히 할 수 있다.
  • 많은 수의 데이터를 다룰 때, 컬렉션이나 배열에 데이터를 삽입, 수정하는 과정에서 for문과 Iterator를 사용하는데 이런 과정에서 코드가 너무 길어지고 재사용성이 떨어지는 문제가 발생할 수 있다. 또한 데이터 소스마다 다른 방식으로 다뤄야 한다는 문제점도 있는데 List를 정렬할 때는 Collections.sort()를 사용해야 하고 배열을 정렬할 때는 Arrays.sort()를 사용해야 한다는 문제점이 있다.
    이러한 문제점들을 해결하기 위해서 만들어진 것이 바로 "스트림(stream)"이다.
  • 스트림은 데이터 소스로부터 데이터를 읽기만 할 뿐, 데이터 소스를 변경하지 않는다.
  • 스트림은 Iterator처럼 일회용이다. 한번 사용된 스트림은 닫혀서 다시 사용할 수 없으며, 필요하다면 스트림을 다시 생성해서 사용해야 한다.
  • 스트림 연산에서는 최종 연산이 수행되기 전까지는 중간 연산이 수행되지 않는다. 중간 연산은 어떤 작업이 수행되어야 하는지 지정해 주는 것일 뿐, 실제로는 최종연산이 수행되어야 스트림의 요소들이 중간 연산을 거쳐 최종 연산에서 소모된다.
    • 중간연산: 연산 결과가 스트림인 연산, 스트림에 연속해서 중간 연산할 수 있다.
    • 최종연산: 연산 결과가 스트림이 아닌 연산, 스트림의 요소를 소모하므로 단 한 번만 가능하다.
  • 스트림으로 데이터를 다룰 때 parallel() 메서드를 호출함으로써 자동적으로 병렬 연산을 수행해 준다.
  • Optional <T>은 "T타입의 객체"를 감싸는 래퍼 클래스이다.
    해당 클래스를 이용하면, null 체크를 위한 if문 없이도 NPE(NullPointerException)가 발생하지 않는 보다 간결하고 안전한 코드를 작성하는 것이 가능하다.

+ Recent posts